2013-08-20 2 views
0

http://www.grymoire.com/Unix/Quote.html показывает список специальных символов. Есть ли параметр/параметр для эха, где я могу рассматривать все, что приходит после эха в виде строки?Escape специальные символы в эхо

В 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 для обозначения переменной или события, поэтому вы получаете эту ошибку.

0

Я думаю, что это из-за вашей оболочки (bash), которая expands/interprets double quotes. Это не относится к одинарным кавычкам. Для получения дополнительной информации, пожалуйста, посмотрите на Bash - Shell Expansion.

Для команды echo есть опция -e, которая позволяет интерпретировать обратные следы, что может помочь.

Смежные вопросы