シェルスクリプトの if 文が誤動作する原因
v=1 if [ $v=2 ]; then echo "NG1" else echo "OK1" fi if [ $v -eq 2 ]; then echo "NG2" else echo "OK2" fi
このシェルスクリプトを実行すると、以下のように出力される。
NG1
OK2
誤動作する原因は
if [ $v=2 ]; then
が
if [ $v = 2 ]; then
となっていないため。
どうやら $v=2 と書くと、それが空白文字列ではないため、真として扱われてしまうようで、スペースを入れると、= が演算子として働くようだ。
if の [ と ] はスペースで空けなければならないということは知っていたが、演算子も空けなければならないということを、身をもって知った。