Kib*_*bet 22 bash shell-script string escape-characters
我不明白 bash 如何评估单引号字符串中撇号字符的转义。
下面是一个例子:
$ echo ''\''Hello World'\'''
'Hello World' # works
$ echo '\'Hello World\''
> # expects you to continue input
Run Code Online (Sandbox Code Playgroud)
我试图寻找对此的解释,但什么也得不到。bash 在这里做什么?
cho*_*oba 21
在单引号中,无法转义。没有办法如何将单引号包含在单引号中。请参阅在man bash 中引用。
che*_*ner 12
除了 POSIX 支持的单引号和双引号之外,还bash提供了一种额外的引用类型,以允许在带引号的字符串中包含一小类转义字符(包括单引号):
$ echo $'\'Hello World\''
'Hello World'
Run Code Online (Sandbox Code Playgroud)
请参阅bash手册页中的 QUOTING 部分,靠近该部分的末尾。(搜索“ANSI C”。)
在 shell 中转义引号的简单示例:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc
Run Code Online (Sandbox Code Playgroud)
它是通过关闭已经打开的一个 ( '),将转义的一个 ( \') 打印出来,然后打开另一个 ( ') 来完成的。
或者:
$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc
Run Code Online (Sandbox Code Playgroud)
它是通过完成已经打开的一个 ( '),将引号放在另一个引号 ( "'") 中,然后打开另一个 ( ') 来完成的。
你所做的('\'Hello World\'')是:
'.\',因此字符串变为:'\'。Hello World 不是引号。\') 而不打开它。') 是开头字符串,但没有预期的结尾字符串。所以正确的例子是:
$ echo \'Hello World\'
'Hello World'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40494 次 |
| 最近记录: |