概要
LinuxやMacには/bin/[
という謎のバイナリファイルがあります。
(※Windowsでは、WSLは当然として、CygwinとかGitBashにもあります)
$ which [
/usr/bin/[
$ file $(which [)
/usr/bin/[: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=e839984e966cdfd5f1bfde6ecda802397d4a4c1f, stripped
これは一体何なのだろう...
ググってもあんまり情報出てこなかったので、Manコマンド叩いてちょっと見てみました。
結論
シェルスクリプトのif文の条件とかで使う[]
の事でした。
考察?
まさかif [ 条件 ]; then
の[
がコマンドだったとは。。。
これはtestコマンドの省略系なので、確かに言われてみればコマンドですね。
[ 条件 ]
は以下の性質を持つようです。
- 条件が真⇒$?=0
- 条件が偽⇒$?=1(※1以外もあるのかも。とりあえず0にはならないみたい。)
ということは、bashなどのif
は、
-
if $?=0となるコマンド
⇒処理が実行される -
if $?!=0となるコマンド
⇒処理が実行されない
という性質を持つのかな?ちょっとやってみました。
$ cat test.txt
hello
$ if grep 'hello' test.txt >/dev/null; then echo '真'; fi
真
$ if grep 'hoge' test.txt >/dev/null; then echo '真'; fi
# 何も出力されなかった
どうやら合ってそうですね。