当前位置: 技术问答>linux和unix
关于命令echo输出“!”问题
来源: 互联网 发布时间:2017-03-12
本文导语: 在执行命令:echo "Hello!" 时会提示bash: !": event not found 错误;而当在“!”右侧加上空格时echo "Hello ! "就会输出正常。这是什么原因了,新手请各位高手详细解答! | 1.bash读取一行输入...
在执行命令: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了。
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楼呐,学习了。