「test、[、そして [[ (2020)」- 技術名称を維持
(jmmv.dev)Unixシステムの興味深いバイナリファイル
- Unixシステムには、名前が単一の記号であるバイナリファイルが存在する。
/bin/[コマンドを実行すると、[という名前のプログラムを確認できる。[とtestは同じバイナリファイルを指しており、2つのコマンドは実際には同一の機能を実行する。
test プログラムと [ の使い方
testプログラムは、シェルで式を評価するために使われる。- 文字列比較、数値比較、ファイル条件の確認などに使われる。
testは引数を受け取って式を評価し、真なら 0、偽なら 1 を返す。
2つのコマンドが存在する理由
testと[の2つのコマンドが存在する理由は明確ではないが、可読性を高めるためだと推測される。[コマンドを使うと、testよりもすっきりと条件文を表現できる。[を使うときは、コマンドの最後の引数を]で終えなければならない。
組み込みコマンドと外部バイナリファイルの違い
testと[はシェルスクリプトで頻繁に使われるため、ほとんどのシェルで組み込みコマンドとして実装されている。- 組み込みコマンドと外部バイナリファイルを使う場合では動作が異なることがあり、シェルによっても差が生じることがある。
[[ の使い方と違い
[[は Bash 拡張であり、[の使用を置き換える。[[は組み込みコマンドとして、式の中で言語の基本ルールを変更できる。[[は文字列比較時にグロブパターンをリテラルとして扱うことで、異なる結果を生むことがある。
シェルスクリプトを書く際の選択
- 移植性のあるシェルスクリプトを書くなら、
[を使うのがよい。 - Bash 専用のスクリプトを書くなら、
[[を使うことでより多くの機能を利用できる。
シェル式と test 式の結合
- シェルは
!、&&、||演算子を通じて独自の式を持っている。 test式とシェル式は、1つのコマンドとして結合できる。
GN⁺の意見
この記事で最も重要な点は、Unixシステムにおいて [ と test が同じ機能を果たす2つの異なるコマンドとして存在していることであり、これはシェルスクリプトの可読性と効率を高めるためだと推測される点である。こうした情報は、初級ソフトウェアエンジニアがシェルスクリプトを書いたり理解したりする際に有用であり、シェルスクリプトの動作原理やさまざまなシェル間の違いを理解する助けにもなるだろう。この記事が興味深いのは、シェルスクリプトの基本的なツールがどのように多様な形で使われうるかを示し、シェルプログラミングの複雑さと柔軟性をよく表しているからだ。
1件のコメント
Hacker Newsのコメント
原著者からの感謝とタイトル修正の提案
Bourneシェルの
testコマンドの歴史と個人的な好みifブロックを使わない条件文の例ifブロックと通常コマンドを組み合わせて使う方法testコマンド内で論理演算を使うかどうかの悩みtestコマンドを使う利点とman testの便利さ[とtestの単一引数の挙動に関する注意LinuxとNetBSDにおける
/bin/[と/bin/testの違いtest/[/[[のより深い探究と、シェルの奇妙な点に関するブログリンクの共有[[はbash専用であることの指摘と、bash使用が確実なら[[を使うべきとの助言[がbashスクリプト言語の一部ではないという認識に対する混乱シェルに対する強い意見と
[使用への反対