受け入れられた答えは、単純な(1レベル)引用に有効です:
$ 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"
2行目は、二重引用符で囲まれたコマンドに対して機能します。
sudo su USER -c 'echo '\'''\''\'\'''\''single quote phrase'\''\'\'''\'' "double quote phrase"'\'''
bash
私を怒らせようとしています。