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种方法需要额外设置,不是很推荐。

无关的一句

如果信息不是很紧急,建议用句号(.)。