コマンドの場合:/ usr/bin/sh -c "ls 1`"(1の後の逆引用符)。
正常に実行する方法は? 「 `」の前にバックスラッシュを追加しても機能しません。 `は私たちが知っている特殊な文字です。私もそれを一重引用符で囲みました(/ usr/bin/sh -c" ls 1'` '")。しかし、それも機能しません。
エラーは常に次のとおりです。
% /usr/bin/sh -c "ls 1\`"
Unmatched `
バックティックをエスケープする必要がありますが、バックスラッシュもエスケープする必要があります。
$ touch 1\` $/bin/sh -c" ls 1 \\\ `" 1`
「2回」エスケープする必要があるのは、二重引用符で囲まれた文字列を1回解釈する環境(シェルスクリプトなど)でこのコマンドを入力しているためです。その後、サブシェルによって再度解釈されます。
また、二重引用符を避けて、最初の解釈を避けることもできます。
$/bin/sh -c 'ls 1\`' 1`
別の方法は、ファイル名を変数に格納し、その値を使用することです。
$ export F = '1`' $ printenv F 1` $/bin/sh -c 'ls $ F'#/ bin/shは、現在のシェルではなく$ Fを解釈します 1`
そして最後に、あなたが試みたものはいくつかのシェルで動作します(上の例のようにbashを使用しています)。
$/bin/sh -c "ls 1 '\`' " 1` $ csh#cshと入力すると、次の行がその環境で実行されます %/ bin/sh -c "ls 1 '\`' " 一致しない`。
最初の場所 でこのようなファイル名を使用しないことを強くお勧めします。
代わりに単一引用符を使用してください:
/usr/bin/sh -c 'ls 1\`'
/usr/bin/sh -c "ls '1\`'"