はじめに
気まぐれで macOS の */bin
なフォルダの中にどんなコマンドがあるのか気になったので調べてみた、そしてまず最初にコマンドっていくつあるの、というのが前回の話。
今回はなんとなく /bin
からとっついてみようと思い、以下のコマンドを実行してみた。
$ ls -l /bin | head total 4888 -rwxr-xr-x 1 root wheel 35824 12 5 18:33 [ -r-xr-xr-x 1 root wheel 623344 12 5 18:33 bash -rwxr-xr-x 1 root wheel 36768 12 5 18:33 cat -rwxr-xr-x 1 root wheel 47296 12 5 18:33 chmod -rwxr-xr-x 1 root wheel 42272 12 5 18:33 cp -rwxr-xr-x 1 root wheel 528688 12 5 18:33 csh -rwxr-xr-x 1 root wheel 110848 12 5 18:33 dash -rwxr-xr-x 1 root wheel 41728 12 5 18:33 date -rwxr-xr-x 1 root wheel 45168 12 5 18:33 dd
ls
で /bin
の中にあるコマンドをリスト形式で取得し、 head
でリストの頭から10行を表示させている。
見慣れたコマンドの中に謎の記号がいるのが分かるだろうか。
/bin/[
そう、 /bin/[
こいつである。
え、コマン...ド?コマンドなの?と最初は思った。
ここで man [
を実行してこいつが何者なのかを見てみる。
TEST(1) BSD General Commands Manual TEST(1) NAME test, [ -- condition evaluation utility SYNOPSIS test expression [ expression ] 略
test と同じっぽい
なるほどどうやら test
というコマンドと同じ内容らしい。
test 条件
で与えられた条件の判定を行うことができる。
例えば test
で指定したフォルダが存在しているか確認したい場合、以下のように実行する。
$ test -d Library $ echo $? 0
test
で Library といフォルダが存在しているか確認し、echo
で test
の実行結果を表示している。
echo $?
の結果が 0 のときは Library フォルダが存在しており、1 のときは存在していないことになる。
/bin/[ で書いてみる
これを [
で書くと以下のようになる。
$ [ -d Library ] $ echo $? 0
どこかで見たことあると思ったら、 Shellscript で if 文を書くときに評価される箇所と同じだなと思った。
Shellscript だとこんな感じかな。
if [ -d Library ]; then なんか処理実行する fi
普段Shellscriptで書いてた if 文の角括弧の正体はこいつだったのか...。