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 次 |
最近记录: |