Linux & Shell

コマンドライン引数の解析引数の区切りを確かめる

コマンドの字句、PATHの要素、環境変数名を別々に調べます。実行はしません。

コマンドライン引数の解析

入力テキスト

解析した要素

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

入力設定

方言:POSIX sh / Bash共通の引用構文。 結果は字句トークンであり実行時のargvではありません。展開と演算子は拒否します。

UTF-16単位で65,536個、512項まで。表示は50項ずつ追加できます。

結果が古くなりました。出力前に再解析してください。

コマンドライン引数の解析は、空白を含むファイル名が分割されたり、空の引数が消えたりする原因を追うときに役立ちます。貼り付けた元の断片と引用符を除いた値を比較し、どこで区切られたかを確認してください。

PATH環境変数の値を調べるモードと、環境変数名だけを一覧にするモードもあります。シェルの代入文、PATHの生の値、NAME=VALUE形式の行は異なる入力形式です。用途に合うモードを選びます。

コマンドライン引数の解析で確認できること

見た目が似ていても、空の引数と存在しない引数は別物です。

引用符によるまとまりを保つ

コマンドライン引数の解析では空の引用符も一つのトークンとして残し、隣接する断片は連結します。閉じていないクォートには位置を示してエラーを返し、入力を勝手に修復しません。

空白を含む断片が一つの要素になり、空の引用符に対応する枠も残る図。

検索順序を変えずに重複を除く

PATHでは最初の非空の完全一致項を残します。空要素は消さず、残るディレクトリの順序も変えません。移動や重複削除は先にプレビューし、適用後は入力と結果を一度取り消せます。

重複フォルダーだけを除き、残ったフォルダーと空の枠の順序を保つ図。

入力形式と更新タイミングを確認

01

文法を選ぶ

コマンドはPOSIX shとBashの共通する引用構文だけを扱います。PATHは値そのもの、環境変数名は一行ごとのNAME=VALUEを入力します。モードを切り替えても入力は置き換わりません。

  • PATHのセミコロン区切りはWindowsのコマンド対応を意味しません。
02

位置と空要素を読む

値はJSON文字列として表示されるため、空文字、空白、改行を区別できます。重複項には最初の項の番号が付き、同名の環境変数も上書きされずに残ります。

  • 行と列は1から始まり、元の文字列のオフセットはUTF-16単位です。
03

書き換えを確認する

重複削除、上下移動、例の読み込み、クリアはプレビュー後に適用します。自動解析は350ミリ秒の待機後に更新し、無効時はボタンまたはCtrl/Cmd+Enterで実行します。

  • 入力や設定を変更すると、再解析までコピーとダウンロードが無効になります。

字句・ディレクトリ・変数名を分けて見る

引用の前後を比較

コマンドライン解析では、引用される場所によって意味が変わります。単一引用符は内部をそのまま保持します。二重引用符は空白を保持し、バックスラッシュをPOSIXの限定された規則で扱います。隣り合う断片は一つになり、負数をオプションだと推測しません。

順序付きのPATH一覧

区切りをコロンかセミコロンから明示的に選びます。元の順序、重複先、空要素が見え、完全一致する非空項だけを削除できます。上下移動は二つの位置を変更する操作として確認を求めます。

環境変数の名前だけ抽出

ASCII形式の名前と任意のexport接頭辞、空行、行全体のコメントに対応します。重複する名前は行番号付きで残り、等号以降の値は解析結果にもJSON出力にも入りません。

一覧の省略と出力を区別

表示は50項ずつ追加できますが、出力には全項が含まれます。位置と重複の情報も保持します。解析エラー時には途中までの結果を有効な報告としてコピーできません。

実行時の動作までは再現しません

結果は字句トークン
NAME=valueのような語も一覧に含まれます。プログラムのオプション定義、エイリアス、組み込み、予約語の文法は判断しないため、結果は実行時のargvそのものではありません。
展開しない構文は拒否
引用されていない演算子や展開文字はエラーです。二重引用符内の未エスケープのドル記号とバッククォートも拒否します。変数展開、置換、glob、ANSI-C引用は評価せず、適切な引用やエスケープで文字として扱います。
一つの論理行が対象
パイプ、リダイレクト、コマンド列、途中の未引用改行は扱いません。バックスラッシュとLFによる継続と末尾のLFは許可します。コマンド内のCRは自動変換せずエラーにします。
パスを正規化しない
空白、大小文字、区切り記号を勝手に変更せず、存在確認もしません。/binと/bin/は別の文字列です。コロン区切りの空要素は現在のディレクトリを表すため残し、PATH内の引用符や変数参照もそのまま扱います。
dotenvの検証ではない
環境変数の値は不透明な文字列で、引用符の整合性も調べません。NAME=がない継続行はエラーです。値の編集や展開、システム環境への反映は、この名前一覧の対象外です。
入力量と方言の上限
65,536個のUTF-16単位と512項まで対応します。OSの制限値ではありません。Windows CRT、cmd、PowerShell、ファイルのアップロード、コマンド検索、入力付き共有URLは非対応です。

コマンドライン引数の解析に関する質問

変数に入れたクォートは展開後も引用として働きますか?

ソースに書いた引用符と、変数の値に含まれる引用符は別です。通常の変数展開だけでは、値を新しいシェル構文として読み直しません。本ツールも入力を一度だけ字句解析し、evalによる再解釈は行いません。

PATHとは何ですか?

コマンドの検索先となるディレクトリの一覧です。POSIXではコロン区切りで、通常は前の項から探します。このページでは貼り付けた一覧を確認できるだけで、端末の実際のPATHやファイルの有無は読み取れません。

引数の値がオプションとして扱われるのはなぜですか?

先頭のハイフンをどう扱うかは実行先のプログラムによります。ここでは-1や--nameを順序通りのトークンとして残し、どのオプションに値が必要かは推測しません。対象プログラムの仕様も確認してください。

subprocessで引用符を含むコマンドが失敗するときは?

文字列をシェルに渡す場合と、引数リストを直接渡す場合を区別してください。後者ではシェル用の引用符を値に含めると別の引数になることがあります。本ツールの元の断片と解析値を比較すると、その違いを確認できます。

${@+"$@"}のような式はどんな場面で使いますか?

既存の位置パラメーターを、それぞれの区切りを保って別のコマンドに渡すためのシェル式です。実際の値には実行環境が必要です。このページはその展開を行わず、ドル記号を含む式として拒否します。

確認したいアドレスや境界がありますか?

入力の確認を続ける

コマンドライン引数の解析に戻り、元の断片と位置を照合してから最新の報告を出力してください。

コマンドの実行やシステム環境の変更は行いません。