日期:2014-05-16  浏览次数:20636 次

叹号
[root@bogon ~]# !
bash: syntax error near unexpected token `newline'
[root@bogon ~]# "!"
bash: !: event not found
[root@bogon ~]# '!'
bash: !: command not found
不知道为什么shell会有这些提示,请高手指点

------解决方案--------------------
在shell中,叹号本身是负责事件引用的。

无引号版:bash期待你输入一个叹号然后跟上一个数字,否则他不知道引用哪条指令,所以第一行说你语法错误。

双引号版:双引号允许解释字符串中特殊符号并使其展开,这里的叹号展开后仍然是个叹号,但仍然期待一个数字作为行号,没有数字,提示了event not found,可能用了默认的某个数字。所以事实上 !100 和 "!100" 是一样的。

单引号版:单引号不负责解析特殊符号,作为一个纯字符串传出。所以单引号的版本,是将叹号作为一条命令进行解释。

总结为:
无符号版被语法解释器解释后发现语法错误,然后退出。
双引号版语法解释器认为引号中包含一个可展开的命令,语法上是没问题,这就绕开了语法解释器,当执行事件引用的时候,发现没有对应的事件,然后退出。
单引号版语法解释仍然认为没有问题,并且不需要展开,此时将以叹号作为一个命令直接执行,而系统中没有一个叹号命令,所以报命令错误。