1195
Comment: clean up
|
871
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]: |
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.