if [[ ]] とかく人と、if [ ] とかく人がいるけれども、単なる流派だとってた。
もしくは、[ ] という構文の中に []を入れることによって、文法的になんかいい恩恵がえられるんじゃないかと、
そう思っていたけれども、全然違っていた。
ええ、コマンドなのこれ?
[ ってコマンドだった。
which [ と実行するとコマンドの場所が出るんでしょ、
うちのArchLinuxでは/usr/bin/[と表示された。
つまり、[というファイル名の実行ファイルがあるということだ。
ちなみにこれは、引数の最後に]がないと怒るというタイプのコマンドだった。
bashとかzsh、ksh、cshなど色々なシェルが存在するが、[はそれらとは独立した別のコマンドで、そこに渡された条件の引数の結果を渡してくれる。
なお、条件式に対して真偽を返すコマンドとしてtestコマンドというものがあるが、[はそれと同じ様に同様のものなんだろう。そもそも元々はtestコマンドが先にあって、それをよりほかの言語っぽくかけるためにできたのだと思う。
一方で[[ ]] はbashなどのシェルに元々ある文法上のものであってコマンドじゃない。
[[ ]] は同じ様にtestコマンドの代わりとして使えるけれども、
こっちはシェル独自の仕様のものなので、[と違って動きが異なることがありそう
調べてみた結果、[はコマンドなので、エラーメッセージが出ることがあるようだね。
でも、挙動については違いはないように見える。
実はある環境で-fでの通常ファイルかどうかの判定でワイルドカードが使用できたパターンがあったのだが、その時は[を使っていた。
バージョンなどにより変わるのだろうか
追って調査を続けてみたいと思う。