Quoting

From Linux Shell Scripting Tutorial - A Beginner's handbook
Revision as of 14:43, 12 September 2009 by Admin (talk | contribs)
Jump to navigation Jump to search

Your bash shell understand special characters with special meanings. For example, $var is used to display the variable value. Bash expands variables and wildcards, for example:

echo $PATH
echo $PS1
echo /etc/*.conf

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 into a single or double quotes. This is also useful to suppress warnings and error messages while writing the shell scripts.

echo "Path is $PATH"

OR

echo 'I want to print $PATH'

Quoting

There are three types of quotes

Quote type Name Meaning Example (type at shell prompt)
" Double Quotes The double quote ( "quote" ) protects everything enclosed between two double quote marks except $, ', " and \.Use the double quotes when you want only variables and command substitution. The double quotes allowes to print the value of $SHELL variable, disables the meaning of wildcards, and finally allows command substitution.
echo "$SHELL"
echo "/etc/*.conf"
echo "Today is $(date)"

 
' Single quotes The single quote ( 'quote' ) protects everything enclosed between two single quote marks. It is used to turn off the special meaning of all characters. The single quotes prevents displaying variable $SHELL value, disabled the meaning of wildcards /etc/*.conf, and finally command substitution ($date) itself.
echo '$SHELL'
echo '/etc/*.conf'
echo 'Today is $(date)'

 
` Back quote Use back quote ( `command-name` ) to execute command and replace a command with its output within the same command-line. However, $(command-name) is encouraged syntax for substitution as it is recommended by POSIX standard and it improves script readability. The date command is executed and its output is substituted back to echo command.
echo "Today is `date`"
echo "Today is $(date)"

 

Backslash

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:

FILE="/etc/resolv.conf"
echo "File is \"$FILE\" "

Sample Outputs:

File is "/etc/resolv.conf"

The following will remove the special meaning of the dollar ( $ ) sign:

FILE="/etc/resolv.conf"
echo "File is \$FILE "

Sample Outputs:

File is $FILE