Enclose a string in single quotes unless it contains elements that you want the shell to interpolate.
Unquoted text and even text enclosed in double quotes is subject to shell expansion and substitution. Consider:
$ echo A coffee is $5?! A coffee is ?! $ echo "A coffee is $5?!" -bash: !": event not found $ echo 'A coffee is $5?!' A coffee is $5?!
In the first example, $5
is
treated as a variable to expand, but since it doesn’t exist it is set to
null. In the second example, the same is true, but we never even get
there because !” is treated as a history substitution, which fails in
this case because it doesn’t match anything in the history. The third
example works as expected.
To mix some shell expansions with some literal strings you may use the shell escape character \ or change your quoting. The exclamation point is a special case because the preceding backslash escape character is not removed. You can work around that by using single quotes or a trailing space as shown here.
$ echo 'A coffee is $5 for' "$USER" '?!' A coffee is $5 for jp ?! $ echo "A coffee is \$5 for $USER?\!" A coffee is $5 for jp?\! $ echo "A coffee is \$5 for $USER?! " A coffee is $5 for jp?!
Also, you can’t embed a single quote inside single quotes, even if using a backslash, since nothing (not even the backslash) is interpolated inside single quotes. But you can work around that by using double quotes with escapes, or by escaping a single quote outside of surrounding single quotes.
# We'll get a continuation prompt since we now have unbalanced quotes $ echo '$USER won't pay $5 for coffee.' > ^C # WRONG $ echo "$USER won't pay $5 for coffee." jp won't pay for coffee. # Works $ echo "$USER won't pay \$5 for coffee." jp won't pay $5 for coffee. # Also works $ echo 'I won'\''t pay $5 for coffee.' I won't pay $5 for coffee.
Chapter 5 for more about shell variable and the
$VAR
syntaxChapter 18 for more about ! and the history commands
Get bash Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.