如何在Linux bash shell中逃避bang(!)字符?

时间:2014-11-30 19:00:02

标签: linux bash shell

我不能为我的生活弄清楚如何逃避Bash中的!角色。例如,我想打印这个:

  

Text text text!

我试过这个:

echo "Text text text\!"

但是打印出这个:

  

Text text text\!

(带有额外的反斜杠)。

我该怎么做?

3 个答案:

答案 0 :(得分:14)

试试这个:

 echo 'Text text text!'

 echo "Text text text"'!'

 echo -e "Text text text\x21"

答案 1 :(得分:4)

单引号:

echo 'Text Text Text!'

这对我有用。

答案 2 :(得分:0)

正如其他答案所示,在一般情况下这样做的答案是使用单引号(因为它们不评估历史记录扩展)。

由于Cyrus's answer表示您可以使用双引号作为主文本,单引号仅用于感叹号,如果这是您需要的。请记住,shell并不关心引用是如何工作的,它会看到"单词"引号脱落后。

所有在非交互式环境中都说过历史扩展默认情况下是关闭的,所以这个逃避/等等。没有必要。

$ cat echo.sh
echo Text Text Text!
$ bash echo.sh
Text Text Text!

理论上,您应该能够在非交互式上下文中手动启用历史记录扩展并遇到此问题,但我在echo命令之前使用set -o hsitory -o histexpand中的{{1}}的快速测试未触发历史记录扩展问题。< / p>