883
Comment: posix solution with a here string
|
1107
|
Deletions are marked like this. | Additions are marked like this. |
Line 3: | Line 3: |
There are a few ways to do this | There are a few ways to do this: |
Line 5: | Line 6: |
#POSIX | #POSIX, but fails if the variable contains newlines |
Line 11: | Line 12: |
One can also achieve in bash (and ksh93) using a herestring | One can also achieve in bash using a herestring {{{ # Bash still fails if the variable contains a newline. read -r x <<< "$x" }}} |
Line 13: | Line 18: |
{{{ # Bash # Remove leading whitespace: read -r x <<< "$x" }}} |
(note: using IFS=$' \t' read -d "" -r x partially fix the "problem" of the newlines but adds a trailing \n) |
Line 37: | Line 38: |
# POSIX | # POSIX, suppress the trailing and leading whitespace on every lines |
Line 40: | Line 41: |
How can I trim leading/trailing white space from one of my variables?
There are a few ways to do this:
#POSIX, but fails if the variable contains newlines read -r var << EOF $var EOF
One can also achieve in bash using a herestring
# Bash still fails if the variable contains a newline. read -r x <<< "$x"
(note: using IFS=$' \t' read -d "" -r x partially fix the "problem" of the newlines but adds a trailing \n)
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, using sed for instance:
# POSIX, suppress the trailing and leading whitespace on every lines x=$(echo "$x" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
These are not necessarily the best, but they're known to work.