http://www.grymoire.com/Unix/Quote.html 显示特殊字符列表。是否有echo的参数/选项,我可以将echo之后的所有内容视为字符串?
在python中,我可以使用"""..."""
或'''...'''
。
$ python
>>> text = '''#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&'''
>>> print text
#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&
我可以在unix的回音中使用'''
而不是"""
,为什么会这样呢?
$ echo #"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&
$ echo '''#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&'''
#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&
$ echo """'''#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&"""
bash: !@#@%$#$^%$: event not found
如果我有这样的字符串会怎么样?
#"`\|^!@#@%$#$^%'''$&%^*()?/\;:$#$"""@$?$$$!&&
我该如何回应这样的字符串? (以下命令不起作用)
echo '''#"`\|^!@#@%$#$^%'''$&%^*()?/\;:$#$"""@$?$$$!&&'''
答案 0 :(得分:1)
使用printf
:
$ printf "%s\n" $'#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&'
#"`\|^!@#@%$#$^%$&%^*()?/\;:$#$@$?$$$!&&
$ printf "%s\n" $'#"`\|^!@#@%$#$^%\'\'\'$&%^*()?/\;:$#$"""@$?$$$!&&'
#"`\|^!@#@%$#$^%'''$&%^*()?/\;:$#$"""@$?$$$!&&
您可能会注意到单引号'
需要转义。
为了将输出分配给变量:
$ foo=$(printf "%s\n" $'#"`\|^!@#@%$#$^%\'\'\'$&%^*()?/\;:$#$"""@$?$$$!&&')
$ echo $foo
#"`\|^!@#@%$#$^%'''$&%^*()?/\;:$#$"""@$?$$$!&&
答案 1 :(得分:0)
这是因为shell将所有扩展规则应用于字符串双引号"
中。 $
或!
是用于表示变量或事件的特殊Unix字符,因此您会收到该错误。
答案 2 :(得分:0)
我认为这是因为你的shell(bash),expands/interprets double quotes。 这不适用于单引号。 有关详细信息,请查看Bash - Shell Expansion。
对于echo
命令,有-e
选项可以解释反斜杠转义 - 这可能会有所帮助。