我如何逃脱!因此终端会看到回声“ Hello World!”的结束语。

问题描述 投票:0回答:1

问题:

通过在终端上输入echo "Hello World!",我会得到以下回答:dquote>

问题(两部分):

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

  1. 我只是很好奇您如何逃脱!
  2. 为什么双引号与单引号不同?

我已经尝试过:

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

terminal escaping double-quotes
1个回答
0
投票

问题1:您如何逃脱!

您可以使用"'!'"

示例:

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

结果:

Hello World!! I'm there.

问题2:为什么这里的双引号与单引号不同?

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

Bash手册:

3.1.2.2 Single Quotes

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

3.1.2.3 Double Quotes

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

特殊参数*@在双引号中具有特殊含义(请参见Shell Parameter Expansion)。

© www.soinside.com 2019 - 2024. All rights reserved.