Bash で空の if ブロックを書くにはコロン「:」を使う
次のような Bash スクリプトを書いた。
#!/bin/bash
if [ 'a' == 'a' ]; then
# 今は処理がないので空
else
echo 'ELSE'
fi
if
ブロックの中はコメントのみだ。'a' == 'a'
は真なので、このコメント部分の行が実行され、echo 'ELSE'
は実行されない。
このコードを実行すると、次のようなエラーが出る。
$ sh test.sh
test.sh: line 5: syntax error near unexpected token `else'
test.sh: line 5: `else'
コレは if
ブロックの中のコメントがなく、完全な空行でも発生する。
何か処理が書かれていないといけないんだな、と思い、「セミコロン ;
でも置いたろ!」の精神で次のように書いてみた。
#!/bin/bash
if [ 'a' == 'a' ]; then
;
else
echo 'ELSE'
fi
そしたらやっぱりエラー。
$ sh test.sh
test.sh: line 4: syntax error near unexpected token `;'
test.sh: line 4: ` ;'
セミコロンでもダメみたい。
どうしたらいいのかと調べてみると、次の記事を見つけた。
- 参考 : shell - Bash syntax error when "else" follows an empty "then" clause - Unix & Linux Stack Exchange
It seems that you want to do a no-op if the file is open so you should add a
:
, which is a null command in bash:
とのことで、コロン :
を使うと良いらしい。早速やってみる。
#!/bin/bash
if [ 'a' == 'a' ]; then
:
else
echo 'ELSE'
fi
echo 'FINISHED'
if
ブロックの中はコロン :
のみ。今度は分かりやすくするため、最後に echo
文を付けておいた。
実行すると、思ったとおりに動いた。
$ sh test.sh
FINISHED
何らかの理由で、このような「何もしないブロック」が必要になった時は、コロンを使う。覚えておこう。