Differences between revisions 4 and 5
Revision 4 as of 2008-05-21 20:52:00
Size: 1195
Editor: GreyCat
Comment: clean up
Revision 5 as of 2008-07-04 08:55:23
Size: 871
Editor: pgas
Comment: remove the loop add a solution with read and here strings
Deletions are marked like this. Additions are marked like this.
Line 17: Line 17:
   while [[ $x = [[:space:]]* ]]; do x=${x#[[:space:]]}; done

   # And now trailing:
   while [[ $x = *[[:space:]] ]]; do x=${x%[[:space:]]}; done
   read -r x <<< "$x"
Line 23: Line 20:
Of course, the preceding example is not optimal, because it removes one character at a time, in a loop (although it's good enough in practice for most purposes). If you want something a bit fancier, there's a solution using [:glob:extglob]: There's also a solution using [:glob:extglob]:

Anchor(faq67)

How can I trim leading/trailing white space from one of my variables?

There are a few ways to do this -- none of them elegant.

First, the most portable way would be to use sed:

   # POSIX
   x=$(echo "$x" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')

One can also achieve the same goal using Bash builtins:

   # Bash
   # Remove leading whitespace:
   read -r x <<< "$x"

There's also a solution using [:glob:extglob]:

   # Bash
   shopt -s extglob
   x=${x##+([[:space:]])} x=${x%%+([[:space:]])}
   shopt -u extglob

This also works in KornShell, without needing the explicit extglob setting:

   # ksh
   x=${x##+([[:space:]])} x=${x%%+([[:space:]])}

There are many, many other ways to do this. These are not necessarily the best, but they're known to work.

BashFAQ/067 (last edited 2018-11-29 15:32:42 by GreyCat)