Size: 1107
Comment:
|
Size: 1130
Comment: igli: *sigh* BASH handles strings fine. m00 gc ;-)
|
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 8: | Line 8: |
$var EOF |
$var EOF |
Line 12: | Line 12: |
One can also achieve in bash using a herestring | The easiest and cleanest way is with a bash herestring: |
Line 14: | Line 14: |
# Bash still fails if the variable contains a newline. read -r x <<< "$x" |
read -rd '' x <<< "$x" |
Line 17: | Line 16: |
Using an empty string as a delimiter means the read consumes the whole string, as NUL is used. (Remember: BASH only does C-string variables.) This is entirely safe for any text, including newlines. | |
Line 18: | Line 18: |
(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]: |
There's also a solution using [[glob|extglob]] which shows how you can use it in parameter expansion: |
Line 36: | Line 33: |
There are many, many other ways to do this, using sed for instance: | There are many, many other ways to do this, using sed for instance: |
Line 41: | Line 38: |
These are not necessarily the best, but they're known to work. |
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
The easiest and cleanest way is with a bash herestring:
read -rd '' x <<< "$x"
Using an empty string as a delimiter means the read consumes the whole string, as NUL is used. (Remember: BASH only does C-string variables.) This is entirely safe for any text, including newlines.
There's also a solution using extglob which shows how you can use it in parameter expansion:
# 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:]]*$//')