2013-08-20 94 views
0

http://www.grymoire.com/Unix/Quote.html顯示特殊字符的列表。有沒有echo的參數/選項,我可以把echo作爲一個字符串後的所有內容?轉義中的特殊字符

在Python中,我可以使用"""..."""'''...'''

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

我可以做Unix的回聲一樣與'''但不""",爲什麼會這樣?

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

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

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

,如果我有這樣的字符串會發生什麼?

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

我該如何迴應這樣的字符串? (下面的命令不起作用)

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

回答

1

使用printf

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

您可能會注意到,單引號'需要進行轉義。

爲了分配輸出到一個變量:

$ foo=$(printf "%s\n" $'#"`\|^[email protected]#@%$#$^%\'\'\'$&%^*()?/\;:$#$"""@$?$$$!&&') 
$ echo $foo 
#"`\|^[email protected]#@%$#$^%'''$&%^*()?/\;:$#$"""@$?$$$!&& 
0

這是因爲外殼適用字符串雙引號"內的所有擴展規則。 $!是表示變量或事件的特殊Unix字符,因此您會得到該錯誤。