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

双引号

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

示例一:

 

//双引号中,通配符*和?将失去其通配符的意义,只是一个普通的字符

[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 "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


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值