Bash双引号内感叹号显示
在Bash中,感叹号可用做历史扩展,但是,在双引号内显示感叹号时,会出现一些问题。
界面模拟
[roy@~]
$ echo "Hello, World!" #1
bash: !": event not found
[roy@~]
$ echo "Hello, World\!" #1
Hello, World\!
[roy@~]
$ echo "Hello, World! " #2
Hello, World!
[roy@~]
$ echo -e "Hello, World\x21" #3
Hello, World!
[roy@~]
$ set +H #4
[roy@~]
$ echo "Hello, World!" #4
Hello, World!
[roy@~]
$ set -H #4
[roy@~]
$ BANG='!' #5
[roy@~]
$ echo "Hello, World$BANG" #5
Hello, World!
解释
#1.第一次
提示事件未找到。
请注意,出错部分为!"
,后面的引号被解析为历史扩展。
将其转义,转义符也显示着,显然不好。
#2.初步解决
在感叹号后面放一个空格,能正常显示了。不过这个有时不好想起。
#3.使用ASCII转义序列
同样可以。
#4.取消历史扩展功能
感叹号可以显示了,我也很少使用历史扩展。
#5.使用变量
通过变量,跳过了历史扩展。
结束语
建议使用第二种方法,简单且可读性强。还有,英语里似乎有标点后加一个空格的习惯。
第4、5种方法需要额外设置,不是很推荐。
无关的一句
如果信息不是很紧急,建议用句号(.)。