« Firefoxアドオン [Hide This Image]を作ってみた | トップページ | ジェネリック薬品 »

2008.12.03

sh系シェルスクリプトで空のif文はエラーになる

今ごろ知ったのだが、sh系シェルスクリプトでif文の中身を空行やコメント行のみなど空っぽにすると、エラーになる。

*空のif文でエラー
---------------------------------------------------
#!/bin/sh

if [ 'a' = 'a' ]; then
fi

[ozuma@macmini ozuma]$ ./go.sh
./go.sh: line 4: syntax error near unexpected token `fi'
./go.sh: line 4: `fi'
---------------------------------------------------


*コメントアウト行のみでもエラー
---------------------------------------------------
#!/bin/sh

if [ 'a' = 'a' ]; then
#echo 'OK'
fi

[ozuma@macmini ozuma]$ ./go.sh
./go.sh: line 5: syntax error near unexpected token `fi'
./go.sh: line 5: `fi'
---------------------------------------------------


*cshなら大丈夫
---------------------------------------------------
#!/bin/csh

if ( 'a' == 'a' ) then
endif

[ozuma@macmini ozuma]$ ./go.sh
[ozuma@macmini ozuma]$
---------------------------------------------------

何故だろう? 仕組みがいまいちよく分からん。
ちなみに最近のLinuxではshはbashそのものなので、Solarisの素のshも使ってみたが同様だった。

まぁ空のif文は書かないコーディング規約にしていても、元々バッチなどで用意されていた機能をコメントアウトして、ifの中身がコメント行のみになってしまうと途端にerrorになる。ので微妙にハマることがある

ちなみに、どうしても空のif文を作りたければ、builtin(1)で用意されているヌルコマンド : を使えば良い。

*コロンを使った空のif文
---------------------------------------------------
#!/bin/sh

if [ 'a' = 'a' ]; then
:
fi
---------------------------------------------------

詳しくは、$ man sh せよ

|

« Firefoxアドオン [Hide This Image]を作ってみた | トップページ | ジェネリック薬品 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Firefoxアドオン [Hide This Image]を作ってみた | トップページ | ジェネリック薬品 »