Your bash shell understands special characters with special meanings. For example, $var is used to expand the variable value. Bash expands variables and [[wildcards]], for example:
source lang="bash">echo "$PATH"
However, sometime you do not wish to use variables or [[wildcards]]. For example, do not print value of $PATH, but just print $PATH on screen as a word. You can enable or disable the meaning of a special character by enclosing them in single quotes. This is also useful to suppress warnings and error messages while writing the shell scripts.
source lang="bash">echo "Path is $PATH" ## $PATH will be expanded</ source>
source lang="bash">echo 'I want to print $PATH' ## PATH will not be expanded</ source>
There are three types of quotes:
The backslash ( \ ) alters the special meaning of the ' and " i.e. it will escape or cancel the special meaning of the next character. The following will display filename in double quote:
source lang="bash">FILE="/etc/resolv.conf"echo "File is \"$FILE\" "</ source>
<pre>File is "/etc/resolv.conf"</pre>
The following will remove the special meaning of the dollar ( $ ) sign:
source lang="bash">FILE="/etc/resolv.conf"echo "File is \$FILE "</ source>
<pre>File is $FILE </pre>
source lang="bash">echo "Pizza bill \$22.5"
echo -e "\a Ding dong\a"
echo "CIFS path must be \\\\NT-Server-Name\\ShareName"
echo -e "Sr.no\t DVD (price) "
echo -e "1\t Spirited Away (INR.200)"
echo -e "2\t Dragon Ball Z (INR.300)"</
The special parameters * and @ have special meaning when in double quotes, but you can disable them with the backslash:
source lang="bash">echo "*"
====Continue command on next line====
You can use the backslash (\) as last character on line to continue command on next line:
source lang="bash">echo "A monkey-tailed boy named Goku is found by an old martial \
>arts expert who raises him as his grandson. One day Goku meets a \
>girl named Bulma and together they go on a quest to retrieve the seven Dragon Balls"</
You can also use the backslash while writing program or [[Writing_your_first_shell_function|function]]:
source lang="bash"># Purpose: clean /tmp/$domain ?
[ "$SERVER_MODE" = "daemon" ] || return 1
[ "$SERVER_MODE" = "clean" \
-a -e /usr/local/etc/nixcraft/lighttpd/disk_cache.init ] && return 0
====Protecting command line arguments====
Type the following command to find out all c program file (*.c):
source lang="bash">find $HOME -name *.c</ source>
In the above example, the *.c is expanded by the bash shell. It will try to match all filename ending with .c in the /home directory (current user's home directory) such as main.c, lib1.c, lib2.c, ssh.c, auth.c etc. You can escape the wild card using the backslash as the escape character:
source lang="bash">find $HOME -name \*.c
find $HOME -name \*main.c
find /nas01/apps/admin -iname \*py </
You can also use the double quote
source lang="bash">find $HOME -name "*.c"</ source>
[[Category:Variables and Quoting]]