1

http://www.grymoire.com/Unix/Quote.html显示特殊字符列表。是否有 echo 的参数/选项,我可以将 echo 之后的所有内容视为字符串?

在 python 中,我可以使用"""..."""or '''...'''

$ python
>>> text = '''#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&'''
>>> print text
#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&

我可以在 unix 的 echo with '''but not中做同样的事情""",为什么会这样?

$ echo #"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&

$ echo '''#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&'''
#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&

$ echo """'''#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&"""
bash: !@#@%$#$^%$: event not found

如果我有这样的字符串会发生什么?

#"`\|^!@#@%$#$^%'''$&%^*()?/\;:$#$"""@$?$$$!&&

我应该如何回显这样的字符串?(以下命令不起作用)

echo '''#"`\|^!@#@%$#$^%'''$&%^*()?/\;:$#$"""@$?$$$!&&'''
4

3 回答 3

2

使用printf

$ printf "%s\n" $'#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&'
#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&
$ printf "%s\n" $'#"`\|^!@#@%$#$^%\'\'\'$&%^*()?/\;:$#$"""@$?$$$!&&'
#"`\|^!@#@%$#$^%'''$&%^*()?/\;:$#$"""@$?$$$!&&

您可能会注意到单引号'需要转义。

为了将输出分配给变量:

$ foo=$(printf "%s\n" $'#"`\|^!@#@%$#$^%\'\'\'$&%^*()?/\;:$#$"""@$?$$$!&&')
$ echo $foo
#"`\|^!@#@%$#$^%'''$&%^*()?/\;:$#$"""@$?$$$!&&
于 2013-08-20T13:09:17.837 回答
0

这是因为 shell 在字符串双引号内应用了所有扩展规则"$或者!是特殊的 Unix 字符来表示变量或事件,因此您会收到该错误。

于 2013-08-20T12:08:41.167 回答
0

我认为这是因为您的外壳(bash)扩展/解释了双引号。这不适用于单引号。有关详细信息,请查看Bash-Shell 扩展

对于该echo命令,有一个-e选项可以解释反斜杠转义 - 这可能会有所帮助。

于 2013-08-20T12:10:43.817 回答