首页 > 解决方案 > 我该如何逃脱!所以终端会看到 echo "Hello World!" 的结束 dquote

问题描述

问题:

通过echo "Hello World!"在终端中输入 , ,我得到的回答是:dquote>

问题(2部分):

如果我使用单引号,终端会返回我期望看到的结果:Hello World!

  1. 你如何逃脱!
  2. 为什么这里的双引号与单引号不同?

我努力了:

使用反斜杠,echo "Hello World/!"似乎不起作用,我仍然返回dquote>。我还尝试寻找有关转义字符和 stackoverflow 答案的其他答案。他们通常最终会超过我的头。

标签: terminalescapingdouble-quotes

解决方案


关于问题1:(你如何逃避!

您可以使用"'!'"

例子:

echo "Hello World"'!'""'!'" I'm there."

结果:

Hello World!! I'm there.

关于问题2:(为什么这里的双引号和单引号不同?

因为!是默认的“历史扩展”字符并且在双引号内执行“历史扩展”。

巴什手册:

3.1.2.2 单引号

将字符括在单引号 ( ') 中会保留引号内每个字符的文字值。单引号之间不能出现单引号,即使前面有反斜杠。

3.1.2.3 双引号

将字符括在双引号 ( ") 中会保留引号内所有字符的文字值,但$, `, \, 和启用历史扩展时除外!。字符$`在双引号内保留其特殊含义(请参阅Shell Expansions)。反斜杠仅在后跟以下字符之一时才保留其特殊含义:$`"\或换行符。在双引号内,删除后面跟有这些字符之一的反斜杠。没有特殊含义的字符前面的反斜杠保持不变。双引号可以用反斜杠在双引号中引用。如果启用,!除非使用反斜杠对出现在双引号中的字符进行转义,否则将执行历史扩展。前面的反斜杠!不会被删除。

双引号中的特殊参数*@具有特殊含义(请参阅Shell 参数扩展)。


推荐阅读