`]`のトークン識別子は何ですか?

`]`のトークン識別子は何ですか?

Bashのマニュアルは次のように言います:

[形式を使用する場合は、コマンドの最後のパラメータは]でなければなりません。

$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found

したがって、]予約語、演算子、または組み込みコマンドではありません。

トークンとしてのトークン識別子は何ですか]?言葉なのか、名前なのか?

答え1

]補数はコマンドの終了記号[です。[

manページで指摘したように、これは実際には引数ですが、具体的にはエンディング[として[扱われます。

;などの他のコマンド終了モードと同様に考えることができますfind .. exec

答え2

[Bashは、または]文字自体をアルファベット文字とは異なるものとして扱いません。

この場合、bashは「単語」であることを見て、[その名前のコマンドを探します。ファイルシステムを見ると/bin/[(または/usr/bin/[)が実行可能ファイルとして存在することがわかります。結局のところ、bashは効率のために組み込みバージョンを提供しますが、これは単に実装の詳細です。

その名前を持つ実行可能ファイルなどのコマンド[には、最後に渡された引数を指定する必要があるという規則があります。]それ以外の場合はエラーが発生します。これは部分的に美学的に見やすいからかもしれませんが、誤って切り取られたコマンドからユーザーを保護するのも良いことです。

実はこれら特別ではない[そのため、or前後の空白は省略できません]


例外:

  • [など]の単語が正しい形式で表示される場合(例[a-z]:)はい特殊およびbashワイルドカードルールが適用されます。
  • [[コマンドはい[特別でできない多くのことができます(そして内部引数は[[ .. ]]一部の改行文字と同様に異なって扱われます)。該当するのも]]非常に特別なのですが、シェル予約語なので命令名にはならず、キーワードの後に​​特殊処理を終了するからです[[

答え3

最初の2つの答えよりも簡単に実行する必要がある文字列です][

関連情報