任意のコマンドを正しくエスケープする方法は?
たとえば、
sudo -u chris sh -c 'echo "\"leftright\""'
上記の内容のエコー:
"leftright"
どのようにエコーするのですか?
"left'right"
次のことを試しましたが、うまくいくと予想しましたが、うまくいきませんでした。
sudo -u chris sh -c 'echo "\"left\'right\""'
どのように解釈されるのかよくわかりません。
答え1
sudo -u chris sh -c 'echo "\"left'\''right\""'
答え2
sh -c 'echo "\"left'"'"'right\""'
または
sh -c 'echo "\"left'\''right\""'
動作します。
上記のいずれかが通過します。
echo "\"left'right\""
後ろに-c
。
一重引用符で囲まれた文字列内にある場合は、文字列を閉じる以外にエスケープはありません。
一重引用符を渡すには、次のようにします。
"'"
または
\'
。
シェルは、入力フィールド区切り文字(通常はスペース)なしで隣接する引数を連結します。