shell中单引号和双引号的使用总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CPP_MAYIBO/article/details/75534131

双引号

双引号中包含的特殊字符(通配符和元字符)将失去他们的特殊意义(美元符号"$",反斜杠"\",反引号"`" 这个三个字符除外),将被当作普通字符。

示例一:

// 双引号中,通配符*和?将失去其通配符的意义,只是一个普通的字符
[root@linux ~] # echo /usr/*
/usr/bin  /usr/etc  /usr/games  /usr/include  /usr/lib  /usr/lib64  /usr/libexec  /usr/local  /usr/sbin 
/usr/share  /usr/src  /usr/tmp
[root@linux ~] # echo "/usr/*"
/usr/ *
[root@hadoop002 ~] # touch {a,b,c}123
[root@hadoop002 ~] # ls
a123  c123  d123
[root@hadoop002 ~] # echo ?123
a123 c123 d123
[root@hadoop002 ~] # echo "?123"
?123
 
 
// 双引号中,$符号 反引号` 反引号\ 依然具有特殊意义
说明:反斜杠只有当其后面的字符是$, ', ", \ 或者换行符时才保留其特殊的含义。
在双引号中, 如果反斜杠 后面是这些字符中的任意一个, 则这个反斜杠就会被删除。
而如果它后面的字符没有特殊的含义,则它将被保留。
[root@linux ~] # str="i love china"
[root@linux ~] # echo "$str"
i love china
[root@linux ~] # echo "`pwd`"
/root
[root@linux ~] # echo "\$"
$
[root@linux ~] # echo "\a"  
\a


示例二:

[root@linux ~] # echo i love      china
i love china
[root@linux ~] # echo echo "i love      china"
i love      china

上述示例中的区别很明显,默认情况下,linux会把空格、制表符、换行符当作单词之间的界定符。即如果没有没有被引号包含起来的空格、制表符和换行符都不会被当作文本的一部分,只是用来做单词分隔。这一示例再次说明在双引号中特殊字符(如:space,tab,newline)将失去其特殊意义。


一个有趣的例子:

[root@linux ~] # cal
       七月 2017     
日 一 二 三 四 五 六
                    1
  2  3  4  5  6  7  8
  9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
[root@linux ~] # echo $(cal)
七月 2017 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
27 28 29 30 31
[root@linux ~] # echo "$(cal)"
       七月 2017     
日 一 二 三 四 五 六
                    1
  2  3  4  5  6  7  8
  9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
第二条命令中,由于cal命令的输出没有被引号包含,那么命令输出中的制表符、换行符都只是被当作了普通的单词分隔符。shell会认为echo后面有多个参数,所以输出了一行信息。


单引号

单引号中包含的特殊字符都将失去其特殊意义,所谓的所见即所得。

看如下示例:

[root@linux ~] # echo text ~/* {1,2,3} $(echo hello) $((3*3)) $PWD
text  /root/anaconda-ks .cfg 1 2 3 hello 9  /root
[root@linux ~] # echo "text ~/* {1,2,3} $(echo hello) $((3*3)) $PWD"
text ~/* {1,2,3} hello 9  /root
[root@linux ~] # echo 'text ~/* {1,2,3} $(echo hello) $((3*3)) $PWD'  
text ~/* {1,2,3} $( echo  hello) $((3*3)) $PWD

可以看到单引号让所有的特殊字符失去了特殊意义

猜你喜欢

转载自blog.csdn.net/CPP_MAYIBO/article/details/75534131