シェル引数エスケープ

POSIX sh/Bash/Zsh(シングルクォート)、Bash の ANSI-C $'…'、PowerShell 向けに文字列を安全に引用符で囲み、引用符付きのシェルの単語を元の値に戻すこともできます。

19 文字 · 19 バイト(UTF-8)

0 文字 · 0 バイト(UTF-8)

すべてブラウザ内で実行されます。データがアップロードされることはありません。

シェルエスケープとは?

任意のテキストを、シェルがそのまま渡す 1 つのシェル引数 に変換します。引用符、$、バッククォート、スペース、改行も含まれます。POSIX シェル、Bash/Zsh の ANSI-C クォート、PowerShell に対応し、引用符付きの単語を元に戻すこともできます。

シェルエスケープの使い方

  1. エスケープ または アンエスケープ を選びます。
  2. シェル として、POSIX sh/Bash/Zsh、Bash/Zsh ANSI-C、PowerShell のいずれかを選びます。
  3. 必要に応じて 各行を別々の引数として扱う か 常に引用符で囲む を選びます。
  4. 値を 入力 に貼り付け、引用符で囲んだ引数を 出力 からコピーします。

例

入力
It's $HOME
出力
'It'\''s $HOME'

シェルエスケープを使うべき場面

ファイル名、パスワード、ユーザー入力を含むコマンドを、スクリプト、SSH コマンド、CI の設定、ドキュメントで組み立てるときに使います。Windows の cmd.exe は、すべての入力に対して安全な引用の方法がないため、対応していません。プログラム内では、シェルの文字列を組み立てるより、引数の配列を渡す方法(execFile、subprocess.run([...]) など)を優先してください。

シェルエスケープの仕組み

POSIX モードでは、テキストを何も特別な意味を持たないシングルクォートで囲み、各 ' を '\''(引用符を閉じ、エスケープした引用符を置き、再び開く)として書きます。これは Python の shlex.quote と同じ方法です。A–Z a–z 0–9 _ @ % + = : , . / - だけでできた単純な単語は、引用符を求めない限り、そのままです。ANSI-C モードでは \n、\t、\'、\xHH のエスケープを使った $'…' を生成し、制御文字が見える形で表示されます。PowerShell モードではシングルクォートを使い、すべてのシングルクォート(タイポグラフィの ‘ ’ も含む)を二重にします。アンエスケープモードでは、展開は行わずに、シェルと同じように単語(引用符、バックスラッシュ、$'…')を解析します。

一般的な使用例

  • スペースや引用符を含むファイル名をコマンドに渡す
  • curl のコマンドに JSON のペイロードを埋め込む
  • ssh host "command" の引数を引用符で囲む
  • 複雑な引用符付きのコマンドラインが実際に何を渡すのか理解する

セキュリティ注意事項

正しい引用符処理がコマンドインジェクションを防ぐのは、引用符で囲んだ値が 1 つの引数として使われる場合だけです。安全でないコマンドが安全になるわけではありません。

よくある質問

ダブルクォートを使えばよいのでは?

ダブルクォートの中では、シェルは $VAR、バッククォート、\ を展開します。シングルクォートはすべての展開を無効にするため、任意のテキストに安全です。

'\'' は何を意味しますか?

シングルクォートの部分を終わらせ、エスケープしたリテラルの引用符を加え、新しいシングルクォートの部分を始めます。シェルがそれらをつなげて 1 つの引数にします。

Windows の cmd.exe には対応していますか?

いいえ。cmd.exe には、% や ^ などの文字をあらゆる文脈で確実に守る引用の方法がありません。PowerShell モードを使うか、シェルを避けてください。

おすすめの次のステップ

他のカテゴリを見る