Прийнята відповідь працює для простого (одного рівня) цитування:
$ echo $'\'single quote phrase\' "double quote phrase"'
'single quote phrase' "double quote phrase"
Щоб команда була представлена на роботу, потрібно двічі процитувати.
Цей сценарій міг би виконати всю роботу:
#!/bin/bash
quote () {
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
read -r line <<-\_line_to_quote_
'single quote phrase' "double quote phrase"
_line_to_quote_
quote "$line"; echo
quote "echo $(quote "$line")"; echo
Виконайте сценарій, щоб отримати:
$ script
''\''single quote phrase'\'' "double quote phrase"'
'echo '\'''\''\'\'''\''single quote phrase'\''\'\'''\'' "double quote phrase"'\'''
Перший рядок працює для простого відлуння:
$ echo ''\''single quote phrase'\'' "double quote phrase"'
'single quote phrase' "double quote phrase"
Другий рядок буде працювати для команди з подвійним цитуванням:
sudo su USER -c 'echo '\'''\''\'\'''\''single quote phrase'\''\'\'''\'' "double quote phrase"'\'''
bash
добре на шляху змусити мене злізти.