版权声明:本文为博主原创文章,未经博主允许不得转载。 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
单引号
单引号中包含的特殊字符都将失去其特殊意义,所谓的所见即所得。
看如下示例:
[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
可以看到单引号让所有的特殊字符失去了特殊意义