使い方
- 上の入力欄に文字列を入力すると、bash・PowerShell・cmd.exe・JSON・正規表現リテラルそれぞれの表記に即座に変換されます。
- 下の「引数リスト」に1行1引数でファイル名などを入力し、先頭コマンドを指定すると、そのまま貼り付けて実行できる安全な1行のコマンドラインが組み立てられます。
- 各結果は「コピー」ボタンでクリップボードに取得できます。
仕組み・各方式の根拠
bashのクォートはbash(1)マニュアルのQUOTING節に基づきます。シングルクォート内は原則すべてリテラルだが'自体は表現できないため、'\''(クォートを閉じ、エスケープした'を挟み、再び開く)という定型パターンで回避します。ダブルクォート内は\ $ ` "の4文字だけがバックスラッシュで特別な意味を持ちます。PowerShellはabout_Quoting_Rulesの規則に従い、シングルクォート内は'を''と2つ重ねる以外リテラル、ダブルクォート内はバッククォート`を エスケープ文字として`" `$ のように使います。
cmd.exeについては性質の異なる2つのエスケープを分けて表示しています。1つはcmd.exe自身が特別扱いする& | < > ^ ( ) !を^で無効化するメタ文字エスケープ、もう1つは呼び出されたプログラムが受け取るargvを組み立てる際の引用符・バックスラッシュの扱い(Microsoft C ランタイムおよびCommandLineToArgvWが採用する方式で、多くのWindows向けプログラムがこの規則で引数を解析します)です。後者は「直前のバックスラッシュの数を数え、"の前では2倍+1本にする」というアルゴリズムで、PythonのCPython実装(subprocess.list2cmdline)などでも同じ規則が使われています。
現場の落とし穴: cmd.exeでは^エスケープと""引用符方式が混在しがちで、「cmd自身の解釈」と「呼び出し先プログラムの引数解析」の2段階を混同すると意図しない結果になります。例えばバッチファイル内でだけ%を%%と二重にする必要があるのに、対話的なcmdプロンプトではその必要がない、という違いも典型的な混乱ポイントです。またfind -exec や xargs にスペースを含むファイル名を渡す際、既定の空白区切りのままだと1つのファイル名が複数の引数に分割されてしまうため、find . -print0 | xargs -0 command(NUL区切りで安全に渡す)や find . -exec command {} \;(1件ずつ確実に実行する)を使うのが定石です。
よくある質問
Q. なぜJSON文字列と正規表現リテラルも含まれているのですか?
A. ログ検索やAPI呼び出し用のクエリを組み立てる際、シェルのエスケープと同時にJSON文字列化や正規表現エスケープが必要になる場面が多いため、まとめて確認できるようにしています。
Q. PowerShellでシングルクォートとダブルクォート、どちらを使うべきですか?
A. 変数展開($var)やサブ式展開が不要ならシングルクォートの方が意図しない展開を防げて安全です。変数を埋め込みたい場合のみダブルクォートを使い、リテラルの$が必要な箇所は`$でエスケープします。
Q. bashのダブルクォートの結果に!のエスケープが含まれないのはなぜですか?
A. !はインタラクティブシェルの履歴展開(history expansion)が有効なときにのみ特別な意味を持ち、スクリプト実行時や履歴展開が無効な場合は通常の文字として扱われるため、既定では対象に含めていません。対話シェルで使う場合は個別に\!へ置き換えてください。
関連ツール
最終更新・根拠の確認日: 2026-09-10 · カテゴリ: Linux・サーバー