Changes

2,090 bytes added ,  22:50, 29 March 2016
m
Text replacement - "</source>" to "</syntaxhighlight>"
Line 3: Line 3:  
|next=Export Variables|The export statement}}
 
|next=Export Variables|The export statement}}
   −
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:
+
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
+
<syntaxhighlight lang="bash" >echo "$PATH"
echo $PS1
+
echo "$PS1"
echo /etc/*.conf</source>
+
echo /etc/*.conf</syntaxhighlight>
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.  
+
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"</source>
+
<syntaxhighlight lang="bash" >echo "Path is $PATH" ## $PATH will be expanded</syntaxhighlight>
 
OR
 
OR
<source lang="bash">echo 'I want to print $PATH'</source>
+
<syntaxhighlight lang="bash" >echo 'I want to print $PATH' ## PATH will not be expanded</syntaxhighlight>
 
==Quoting==
 
==Quoting==
 
There are three types of quotes:
 
There are three types of quotes:
Line 31: Line 31:  
|\
 
|\
 
|The Backslash
 
|The Backslash
|Use backslahs to change the special meaning of the characters or to escape special characters within the text such as quotation marks.
+
|Use backslash to change the special meaning of the characters or to escape special characters within the text such as quotation marks.
|You can use \ before dollar sign is used to told to have no special meaning. Disable the meaning of the next character in $PATH (i.e. do not display value of $PATH variable):<br/><code>echo "Path is \$PATH"<br />echo "Path is $PATH"<br />&nbsp;
+
|You can use \ before dollar sign to tell the shell to have no special meaning. Disable the meaning of the next character in $PATH (i.e. do not display value of $PATH variable):<br/><code>echo "Path is \$PATH"<br />echo "Path is $PATH"<br />&nbsp;
 
|-
 
|-
 
|}
 
|}
Line 38: Line 38:  
==The Backslash==
 
==The 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:
 
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"
+
<syntaxhighlight lang="bash" >FILE="/etc/resolv.conf"
echo "File is \"$FILE\" "</source>
+
echo "File is \"$FILE\" "</syntaxhighlight>
 
Sample Outputs:
 
Sample Outputs:
 
<pre>File is "/etc/resolv.conf"</pre>
 
<pre>File is "/etc/resolv.conf"</pre>
 
The following will remove the special meaning of the dollar ( $ ) sign:
 
The following will remove the special meaning of the dollar ( $ ) sign:
<source lang="bash">FILE="/etc/resolv.conf"
+
<syntaxhighlight lang="bash" >FILE="/etc/resolv.conf"
echo "File is \$FILE "</source>
+
echo "File is \$FILE "</syntaxhighlight>
 
Sample Outputs:
 
Sample Outputs:
 
<pre>File is $FILE </pre>
 
<pre>File is $FILE </pre>
Line 64: Line 64:  
               \cx    a control-x character
 
               \cx    a control-x character
 
</pre>
 
</pre>
 +
Use -e option of echo command to enable interpretation of backslash escapes.
 +
 
===Examples===
 
===Examples===
<source lang="bash">echo -e "\a Ding dong\a"
+
<syntaxhighlight lang="bash" >echo "Pizza bill \$22.5"
 +
echo -e "\a Ding dong\a"
 
echo "CIFS path must be \\\\NT-Server-Name\\ShareName"
 
echo "CIFS path must be \\\\NT-Server-Name\\ShareName"
 
echo -e "Sr.no\t DVD (price) "
 
echo -e "Sr.no\t DVD (price) "
 
echo -e "1\t Spirited Away (INR.200)"
 
echo -e "1\t Spirited Away (INR.200)"
echo -e "2\t Dragon Ball Z (INR.300)"</source>
+
echo -e "2\t Dragon Ball Z (INR.300)"</syntaxhighlight>
 +
The special parameters * and @ have special meaning when in double quotes, but you can disable them with the backslash:
 +
<syntaxhighlight lang="bash" >echo "*"
 +
echo "\*"
 +
echo "\@"</syntaxhighlight>
 +
====Continue command on next line====
 +
You can use the backslash (\) as last character on line to continue command on next line:
 +
<syntaxhighlight 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"</syntaxhighlight>
 +
You can also use the backslash while writing program or [[Writing_your_first_shell_function|function]]:
 +
<syntaxhighlight lang="bash" ># Purpose: clean /tmp/$domain ?
 +
check_temp_clean() {
 +
        [ "$SERVER_MODE" = "daemon" ] || return 1
 +
        [ "$SERVER_MODE"  = "init"    ] && return 0
 +
        # note use of the backslash character to continue command on next line   
 +
        [ "$SERVER_MODE"  = "clean" \
 +
          -a -e /usr/local/etc/nixcraft/lighttpd/disk_cache.init ] && return 0
 +
        return 1
 +
}</syntaxhighlight>
 +
 
 +
====Protecting command line arguments====
 +
Type the following command to find out all c program file (*.c):
 +
<syntaxhighlight lang="bash" >find $HOME -name *.c</syntaxhighlight>
 +
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:
 +
<syntaxhighlight lang="bash" >find $HOME -name \*.c
 +
find $HOME -name \*main.c
 +
find /nas01/apps/admin -iname \*py </syntaxhighlight>
 +
You can also use the double quote
 +
<syntaxhighlight lang="bash" >find $HOME -name "*.c"</syntaxhighlight>
 +
 
 
[[Category:Variables and Quoting]]
 
[[Category:Variables and Quoting]]
 
{{navigation
 
{{navigation
 
|previous=Echo Command|Display the value of shell variables
 
|previous=Echo Command|Display the value of shell variables
 
|next=Export Variables|The export statement}}
 
|next=Export Variables|The export statement}}