写在前面:Shell中的特殊字符有
$ 美元符
\ 反斜杠
` 反引号
"双引号
< ,>;,*,?,[,]
1、反引号``:命令替换
在输出一句话的时候,如果想中间加入命令输出结果,在反引号里面输入命令就可以做到,和$COMMAND是一样的。
[root@localhost ~]# echo today is `date +%F`
today is 2016-08-03
2、双引号"":弱引用,可以实现变量和命令的替换。
在双引号中可以使用变量,用$COMMAND。
[root@localhost ~]# x=*
[root@localhost ~]# echo "$x"
[root@localhost ~]# echo "`date`"
3、单引号'':强引用,不完成变量替换
在单引号中不能使用任何变量和命令。
[root@localhost ~]# x=*
[root@localhost ~]# echo '$x'
$x
[root@localhost ~]# echo '`date`'
`date`
4、$符号
作用1:用于引用变量内容变;等号赋值,变量赋值
作用2:用于行结束符
作用3:变量的间接引用;
作用4:变量的参数替换
作用5:特殊位置符
$0返回脚本名称,绝对路径;`basename $0`仅返回脚本名称,没有路径
1)echo $? 显示的是上一条指令退出状态
2)echo "$?" 效果同上
3)echo '$?' 显示的是$?
4)echo \$? 显示的是$?
5)echo "\$?" 显示的是$?
大家可能已经看出 $符号在双引号中具有特殊意义 双引号对$符号不起作用,而单引号可以将特殊字符的的特殊意义屏蔽掉,使其能显示为字符本身,反斜杠也可以将特殊字符的特殊含义屏蔽掉,使特殊字符失去特殊含义。
5.反斜杠\
反斜杠的作用是将特殊符号字符的特殊含义屏蔽掉,使其还是原字符。
A=1234
echo \$A 显示为$A 如果不加\将显示为1234
echo \` 显示为`
echo \" 显示为双引号
echo \\ 显示为\
6、` 反引号
反引号的功能是命令替换,将反引号中的字符串做为命令来执行,我们在用shell编程时经常用的到 将系统命令的执行结果赋给一个变量
A=`date`
echo $A 显示的不是date而是当时的时间串
比如有一文件A的内容如下
ABCDEFG
1234456
abcdefg
B=`cat A|grep 234`? # 检索文件A中含有字符串234的行
echo $B 将显示为1234456
echo "$B" 将显示为什么?
echo "\$B" 将显示为什么?读者自己试试
7、" 双引号
在系统中有些特殊字符,为避免引用这些特殊字符 往往用双引号或单引号将这些特殊字符引起来,使其不具有特殊含义。
但有一部分特殊字符在引号中还是具有特殊含义,用双引号引起来是不起作用的。本文中所列的前四个特殊字符在双引号中还是特殊字符。为了使其不具有特殊含义一是用单引号引进来二是用\反斜线使其失去作用。
比如我们想原样输出这些特殊字符
echo """
echo "$"
echo "\"
echo "`"
以上不是你所期望的结果,因为双引号对它们不起作用,你只能这样才能输出这些特殊字符的原形
echo '"'
echo '$'
echo '\'
echo '`'
或
echo "\""
echo "\$"
echo "\\"
echo "\`"
将分别显示为 " $ \ `
8、其它特殊字符
1.单引号 (' ') 单引号,不具有变量置换的功能,即单引号会告诉shell忽略所有的特殊字符,
2.双引号(" ") 双引号,具有变量置换的功能,即双引号之要求忽略大多数特殊字符,除了$(使用变量前导符), \(转义符), `(反向引号)。
3.反向引号(` `): 位于键盘Tab键上面一行的键,用作命令替换(相当于$(...))
注:命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。