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

关于命令echo输出“!”问题
在执行命令:echo "Hello!" 时会提示bash: !": event not found 错误;而当在“!”右侧加上空格时echo "Hello ! "就会输出正常。这是什么原因了,新手请各位高手详细解答!

------解决方案--------------------
1.bash读取一行输入,echo "hello!"

2.碰到是双引号,weak quote,所以会对里面的内容进行intepreter

3.然后bash对那写字符进行inteperter,碰到了!符号,同时后面没有跟blank,=,newline,carriage return符号,就会进行历史命令替换。你试试echo "hello!=",应该就不会有错误提示了。

echo "hello! "也是一样的,后面跟的是blank符号。

至于echo 'hello!'不会,因为是single quote,是属于strong quote,所以bash不会对其进行intepreter,所以执行后,没有错误发生。

为什么会提示event not found呢?因为bash的历史命令替换是这么构成的
event designator:word designator:modifier

第一部分是表示哪个历史命令,就是哪个event,是通过!加上面没有提到的那几个字符从历史命令当中进行选取的。
第二部分是表示选取当前选取了的历史命令的哪个部分,当然是通过一些特殊符号,详细可以察看bash帮助,不详述。
第三部分是对当前选取了的历史命令的修改。

例子当中!后面什么都没有,而历史命令当中没有这种命令,所以就提示event not found了。
------解决方案--------------------
双引号中变量会被解析成其内在的值,而单引号不会,单引号只会输出你的echo的值

------解决方案--------------------
原来!还有这么一个陷阱.
------解决方案--------------------
解释不错 受教了
------解决方案--------------------
谢谢2楼呐,学习了。