アラのアラアラしい日記

こっそりかいてます

ところでbashのtest commandってどうなってるの

最近shellの話が多いですが今回もshellです。

ちょっと前にチームのテクニカルリーダーから教えてもらった話に
感動したので忘備録として書きます。


f:id:wknar0311:20140513194924p:plain
貝を描きましたがうまくできませんでした。


みんな大好きシェルスクリプトでは、
testコマンドを使うことが多いと思います。

例えばファイルの存在をチェックする時は、

if test -e okome.txt; then
  echo 'okome aruyo'
fi

こんなふうに書けると思います。

ただ、こっち(↓)の方がわりと主流ですよね。

if [ -e okome.txt ]; then
  echo 'okome aruyo'
fi


そして、ここで使われている" [ "って、
実はちゃんと内部コマンド(組み込みコマンド)として存在しているんです。


test commandを探してみます。

http://i.gyazo.com/922bb1f88bbadff068f251f05bd400dc.png
/usr/binの中に存在しています。

ということは、" [ " commandも、
http://i.gyazo.com/86e8626b721d1c7c8fa70557a2457ead.png
存在しちゃいます。


http://i.gyazo.com/0fc471c610bbf3333c017d703f6f97bf.png
こんな感じで、test commandと同じように使える理由が分かりますね!


ただし、[ commandの方にはルールもあります。
例えば、" ] "をなしで実行すると、

http://i.gyazo.com/43942887b5a0db80a30165b3edac5562.png
怒られます。最終引数として、" ] "が必要になります。

また、

http://i.gyazo.com/4f354ae3e70b2e525ba81fd07c308ad6.png
当たり前かもしれませんが、コマンドなのでスペースないと怒ります。



また、この [ command を実行できないOSもあるようなので注意です。


おしまい。