Certain characters are significant to the shell; we have seen, for example,
that the use of double quotes ("
) characters affect how spaces and
TAB characters are treated, for example:
$ echo Hello World Hello World $ echo "Hello World" Hello World
So how do we display: Hello "World"
?
$ echo "Hello \"World\""
The first and last " characters wrap the whole lot into one parameter
passed to echo
so that the spacing between the two words is
kept as is. But the code:
$ echo "Hello " World ""
would be interpreted as three parameters:
So the output would be
Hello World
Note that we lose the quotes entirely. This is because the first and second quotes mark off the Hello and following spaces; the second argument is an unquoted "World" and the third argument is the empty string; "".
Notice that this:
$ echo "Hello "World""is actually only one parameter (no spaces between the quoted parameters), and that you can test this by replacing the
echo
command with (for example) ls
.
Most characters (*
, '
, etc) are not interpreted (ie, they are
taken literally) by means of placing them in double quotes (""). They are taken
as is and passed on to the command being called. An example using the asterisk (*
) goes:
$ echo * case.shtml escape.shtml first.shtml functions.shtml hints.shtml index.shtml ip-primer.txt raid1+0.txt $ echo *txt ip-primer.txt raid1+0.txt $ echo "*" * $ echo "*txt" *txt
In the first example, *
is expanded to mean all files in the current directory.
In the second example, *txt
means all files ending in txt
.
In the third, we put the *
in double quotes, and it is interpreted literally.
In the fourth example, the same applies, but we have appended txt
to the string.
However, "
, $
, `
, and \
are still interpreted by
the shell, even when they're in double quotes.
The backslash (\
) character is used to mark these special characters so that
they are not interpreted by the shell, but passed on to the command being run
(for example, echo
).
So to output the string: (Assuming that the value of $X
is 5):
A quote is ", backslash is \, backtick is `. A few spaces are and dollar is $. $X is 5.
we would have to write:
$ echo "A quote is \", backslash is \\, backtick is \`." A quote is ", backslash is \, backtick is `. $ echo "A few spaces are and dollar is \$. \$X is ${X}." A few spaces are and dollar is $. $X is 5.
We have seen why the "
is special for preserving spacing. Dollar ($
) is
special because it marks a variable, so $X
is
replaced by the shell with the contents of the variable X
.
Backslash (\
) is special because it is itself used to mark other characters
off; we need the following options for a complete shell:
$ echo "This is \\ a backslash" This is \ a backslash $ echo "This is \" a quote and this is \\ a backslash" This is " a quote and this is \ a backslash
So backslash itself must be escaped to show that it is to be taken literally. The other special character, the backtick, is discussed later in Chapter 12, External Programs.
My Shell Scripting books, available in Paperback and eBook formats. This tutorial is more of a general introduction to Shell Scripting, the longer Shell Scripting: Expert Recipes for Linux, Bash and more book covers every aspect of Bash in detail.
Shell Scripting Tutorial is this tutorial, in 88-page Paperback and eBook formats. Convenient to read on the go, and in paperback format good to keep by your desk as an ever-present companion. Also available in PDF form from Gumroad:Get this tutorial as a PDF | Shell Scripting: Expert Recipes for Linux, Bash and more is my 564-page book on Shell Scripting. The first half covers all of the features of the shell in every detail; the second half has real-world shell scripts, organised by topic, along with detailed discussion of each script. |