bashの角かっことテストコマンドの違いは何ですか?

bashの角かっことテストコマンドの違いは何ですか?

単一の括弧[testコマンドはbashシェルに組み込まれています。

[かっことtestコマンドが同じ機能を持っている場合、なぜ2つの別々のコマンドがありますか?

ベストアンサー1

[そしてtest同じコマンドです。ただ、[最後のパラメータになると予想してください](そうでなければ無視されます)。

[コマンドはtest通常同じバイナリで実装されます。 Bourneのようなほとんどのシェルfishでは。 Cシェルやその派生物はそうではありません。 Cシェルには、通常/ utilsで実行されるいくつかのタスクを実行するための特別な構造があります。[testrctest[

このtestコマンドは、当時新しいBourneシェルと共に1970年代後半のUnix V7に登場しました。以前のバージョンにはコマンドがなく、対応するtestシェルは構成されていませんでしたif。しかし、一つあります。独立ifコマンド同じテストのいくつかを実行しtest、結果に応じてコマンドを実行できます。

Bourneシェルにはいくつかの制御ステートメント(if// )が導入されているため、whileこれらのステートメントの条件付き部分で使用してさまざまなテストを実行できるコマンドを追加するために導入されました。untiltest

V7にはコマンドはありませんが、[いくつかのコマンドを見つけることができます。トリムしない コードをコメントアウトしてください。そこには組み込まれていますが[、これは彼らがそれを想像していましたが、shおそらく当時はコードを台無しにしないことを決めたかもしれません。

[testBourneシェルに組み込み機能を追加します。1981年システムIIIに入る

それ以降のすべてのBourne様シェルには/組み込み機能がbashあります[が、Almquistシェルには最初から/組み込み機能がありましたが(実際にマージ)、完全に無効になるまで初期BSDで元々無効になりました(コンパイルされていません)。やや遅れていました。test[testexpr

[test両方標準 POSIX コマンド。組み込む必要はありませんが、などで実行可能である必要があるため、スタンドアロンの実行可能envファイルとして使用できますfind -execexecvp()

スタンドアロンユーティリティを提供するシステムもありますが、いずれも提供されませtest[。これは、以下をより頻繁に見る理由を説明します。

find . -exec test -f {} ';'

(GNUと同じfind-xtype f、比較:

find . -exec [ -f {} ] ';'

[スタンドアロンユーティリティを提供しないシステムでは、この操作は失敗します。

[testとの間の別の逸話的な違いtest <any-string>(と同じ)は、空ではない、または返すことができないバージョンまたはその使用法[ <any-string> ]の有効なテストです。ただし、これは有効なテストではないため、GNUスタンドアロンユーティリティは一般的なエラーメッセージの代わりにバージョンと使用情報を別々に受け入れて返しますが、GNUはそうではありません(参照)<any-string>test --versiontest --helptest[ --version[--version--helpmissing ‘]’test2003年に適用(誤解を招くコメント2005年に復元)).

$ '/usr/bin/[' --version
[ (GNU coreutils) 8.30
[...]
$ /usr/bin/test --version && echo "--version is non-empty"
--version is non-empty
$ '/usr/bin/[' --something-else
/usr/bin/[: missing ‘]’

おすすめ記事