Answers:
用单引号引起来的转义是不可能的。无法将单引号包含在单引号中。见报价在人的bash。
echo '\''
echo $'\'hello world\''
为了解释转义的撇号发生了什么,我们将检查您的第二个示例(另请参见单引号或强引号):
$ echo '\'Hello World\''
> # expects you to continue input
正如您所说的,在这里您已使报价挂起。现在修剪末端并将其更改为:
v v v
$ echo '\'Hello World # Echo two strings: '\' and 'Hello World'.
\Hello World ^
此处未引用“ Hello World”子字符串,但它的表现就好像被强引用了。再次使用示例,这次以不同的方式修剪末端:
vv v (plain apostrophe)
$ echo '\'Hello World\' # Will echo: '\' and 'Hello World''
\Hello World' ^^ # Note that the trailing ' char is backslash escaped.
“ Hello World”子字符串再次表现为强引号,但仅在末尾添加了撇号(转义,因此不再单引号)。
当另一个单引号添加到末尾时(您的原始示例),该字符串将挂起并等待右引号。
在shell中转义引号的简单示例:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc
通过关闭已经打开的一个('
),将转义的一个(\'
)进行打印,然后再打开另一个(('
)来完成此操作。
或者:
$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc
这是通过完成已经打开的一个完成的('
),在另一个引号("'"
)中放置引号,然后再打开另一个('
),来完成此操作。
你做了什么 ('\'Hello World\''
)是:
'
。\'
,因此字符串变为:'\'
。Hello World
不是引号。\'
)而不打开它。'
)是打开字符串,但是没有期望的关闭字符串。因此正确的例子是:
$ echo \'Hello World\'
'Hello World'
echo \''Hello World'\'