コマンドパラメータを使用してシェルに渡す文字列を正しくエスケープする方法

コマンドパラメータを使用してシェルに渡す文字列を正しくエスケープする方法

任意のコマンドを正しくエスケープする方法は?


たとえば、

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

一重引用符で囲まれた文字列内にある場合は、文字列を閉じる以外にエスケープはありません。

一重引用符を渡すには、次のようにします。

 "'"

または

 \'

シェルは、入力フィールド区切り文字(通常はスペース)なしで隣接する引数を連結します。

関連情報