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 せよ



最近のコメント