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つの答えよりも簡単に実行する必要がある文字列です]
。[