Linux & Shell

シェルエスケープ引数の区切りをそのままに

対象のシェルを選び、引用前の値を入力します。コマンド名は必要な場合だけ別欄に指定してください。

シェルエスケープ

引用前の引数

引用結果/コマンドプレビュー

処理はこのブラウザー内で完結し、入力の送信やコマンドの実行は行いません。

引用の設定

オプションを含めず、一つの実行ファイル名かパスを指定します。空欄なら引数のみ出力します。

配列は文字列のみ対応。空文字と値の中の改行を保持します。

入力とコマンドは合計65,536文字、引数は1,000個まで。

シェル一層分の引用です。CMD、入れ子のコマンド、Windowsネイティブの引数解析は対象外です。

引数を1個生成しました。プレビューは実行されていません。

シェルエスケープは、空白を含むパスやアポストロフィ付きの名前を引数にするときに役立ちます。画面では一つの値でも、端末では単語に分かれたり、ドル記号から変数が展開されたりすることがあります。

単一モードでは入力全体を一つの引数として扱います。複数の値にはJSON文字列配列を使うと、空文字や値の中の改行まで区別したまま渡せます。

シェルエスケープを使う理由

空の値も一つとして数える

シェルエスケープでは["", "two words"]が二つの引数になります。最初の値は空でも消えず、次の値の空白も区切りに変わりません。前後の空白削除や並べ替えも行いません。

空のカードを含む三つの値が、順序と区切りを保ったまま引用枠に入る図。

値を変えずに方言を切り替える

POSIXでは引用を一度閉じてからアポストロフィを挿入します。PowerShellでは引用符を重ねます。入力はそのままで出力構文だけを切り替え、曲がった引用符も保持します。

一つの入力から二種類の引用構造へ分岐する図。

空文字と区切りを取り違えないために

01

引数がない状態を区別する

[]は引数なし、[""]は空文字の引数が一つある状態です。単一モードで空欄を手動変換すると空文字を引用できます。クリアした直後は自動生成せず待機します。

  • 配列内の\nは一つの引数に含まれる改行です。
02

コマンド名とオプションを分ける

任意のコマンド欄は一つの実行ファイル名またはパスです。オプションは引数配列に入れます。PowerShellでは引用したパスを呼び出す&がプレビューに加わります。

  • 空白入りのコマンド欄も一つのパスとして扱います。
03

件数と更新状態を確認する

自動変換は編集から350ミリ秒後に動きます。オフにすると生成ボタンが現れ、Ctrl/Cmd + Enterも使えます。変更直後は古い結果をコピー・保存できません。

  • サンプルとクリアには置換プレビューがあり、元に戻すと入力と出力が復元されます。

値のまま渡すための引用

POSIXとBashに対応

シングルクォートで囲み、ドル記号、ワイルドカード、セミコロン、バッククォートを文字として残します。コマンド置換に見える内容も実行する構文には変えません。

PowerShellの引用符を処理

ASCIIのアポストロフィとU+2018からU+201Bの四種類をそれぞれ重ねます。バックスラッシュはそのままです。配列モードのパスはJSONの記法で入力してください。

引数列と呼び出しを確認

引用済みの値を空白で連結し、引数の個数を表示します。実行ファイル名を指定すれば呼び出し全体を確認できます。空配列でコマンドも空なら、保存する文字列はありません。

この引用が扱う範囲

対象はシェル一層分
CMD、バッチ、fish、.env、入れ子のSSHは対象外です。PowerShellの出力は言語上の文字列であり、Windows PowerShell 5.1やLegacyモード、ネイティブ実行ファイルの再解釈は保証しません。
元の値を入力する
完成済みコマンドの解析、引用解除、変数展開、ファイルやURLからの取り込みは行いません。配列から出すのは引数列であり、Bashの配列変数宣言ではありません。
プログラムの動作は検査しない
プレビューを実行したり、プログラムの存在を調べたりしません。--deleteのような値は引用後もオプションになり得ます。--を自動で挿入することもありません。
長さと型の制限
入力とコマンドを合わせて65,536 UTF-16コード単位、配列は1,000要素までです。数値、真偽値、null、オブジェクト、入れ子の配列は文字列に変換せずエラーにします。
文字を黙って落とさない
NULと対になっていないUnicodeサロゲートは拒否します。空白、タブ、改行は保持するので結果が複数行になる場合があります。配列要素のエラー位置は要素の先頭です。

シェルエスケープのよくある質問

Bashのシングルクォート内にシングルクォートを含めるには?

POSIXでは単一引用符の内側に同じ引用符を直接置けません。引用を閉じ、外側でアポストロフィをエスケープしてから再開します。O'Brienなら'O'\''Brien'という形になります。

シングルクォートとダブルクォートの違いは?

シングルクォートは値を文字どおりに保ちます。ダブルクォート内では$HOMEや$(...)などの展開が残ります。このページは文字どおりの引用を作るため、展開が必要な式はスクリプト側で記述してください。

空白を含む引数を渡すには?

コマンド全体ではなく、引数ごとに引用します。空白入りの値が二つなら、配列モードで二つのJSON文字列を入力し、結果の件数が二つになっていることを確認します。

区切り文字で分割すると空の要素が消えるのはなぜ?

区切り文字や空白による分割では空の項目が消えることがあります。["a", "", "b"]なら三つとも保持できます。[]と[""]はそれぞれゼロ個と一個として区別されます。

PowerShellの単一引用符の文字列に引用符を含めるには?

使えます。PowerShellでは'don''t'のように内部の単一引用符を重ねます。曲がった単一引用符も同様に処理します。ただしCMDやネイティブプログラムの引数規則とは別です。

結果について気になる点がありますか?

次の呼び出しの前に値を確認

シェルエスケープで実際の貼り付け先を選び、引数の件数とプレビューを確認してから最新の結果をコピーしてください。