5.1. Quoting Variables
When referencing a variable, it is generally advisable to
enclose its name in double quotes.
This prevents reinterpretation of all special characters within
the quoted string -- the variable name
-- except $, ` (backquote), and
\ (escape).
Keeping $ as a special character within
double quotes permits referencing a quoted variable
("$variable"), that is, replacing the
variable with its value (see Example 4-1, above).
Use double quotes to prevent word splitting.
An argument enclosed in double quotes presents
itself as a single word, even if it contains whitespace separators.
variable1="a variable containing five words"
COMMAND This is $variable1 # Executes COMMAND with 7 arguments:
# "This" "is" "a" "variable" "containing" "five" "words"
COMMAND "This is $variable1" # Executes COMMAND with 1 argument:
# "This is a variable containing five words"
variable2="" # Empty.
COMMAND $variable2 $variable2 $variable2 # Executes COMMAND with no arguments.
COMMAND "$variable2" "$variable2" "$variable2" # Executes COMMAND with 3 empty arguments.
COMMAND "$variable2 $variable2 $variable2" # Executes COMMAND with 1 argument (2 spaces).
# Thanks, St�phane Chazelas. |
| Enclosing the arguments to an echo
statement in double quotes is necessary only when word splitting
or preservation of whitespace
is an issue. |
Example 5-1. Echoing Weird Variables
#!/bin/bash
# weirdvars.sh: Echoing weird variables.
var="'(]\\{}\$\""
echo $var # '(]\{}$"
echo "$var" # '(]\{}$" Doesn't make a difference.
echo
IFS='\'
echo $var # '(] {}$" \ converted to space. Why?
echo "$var" # '(]\{}$"
# Examples above supplied by Stephane Chazelas.
exit 0 |
Single quotes (' ') operate similarly to double
quotes, but do not permit referencing variables, since
the special meaning of $ is turned off.
Within single quotes, every special
character except ' gets interpreted literally.
Consider single quotes ("full quoting") to be a
stricter method of quoting than double quotes ("partial
quoting").
| Since even the escape character (\)
gets a literal interpretation within single quotes, trying to
enclose a single quote within single quotes will not yield the
expected result.
echo "Why can't I write 's between single quotes"
echo
# The roundabout method.
echo 'Why can'\''t I write '"'"'s between single quotes'
# |-------| |----------| |-----------------------|
# Three single-quoted strings, with escaped and quoted single quotes between.
# This example courtesy of St�phane Chazelas. |
|