bashの文字列判定、-n と -z の使い分け

  • Shell
  • Bash

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

何を確認したか

$STRING が空かどうかを判定する時によく使う書き方。

if [ -n "$STRING" ]; then
# 空でないとき
fi
if [ -z "$STRING" ]; then
# 空のとき
fi

-n は文字列長が0でない(空でない)ときに真になる。-z は文字列長が0(空)のときに真になる。単純だけど毎回どっちがどっちか忘れる。

注意点

  • 変数は必ずダブルクオートで囲む。[ -n $STRING ] のようにクオートを外すと、$STRING が空や未定義の場合に単語分割の影響で意図しない挙動になることがある。
  • set -u(nounset)を使っている場合、未定義変数の参照でエラーになる。存在チェックまでしたいなら ${STRING:-} みたいなデフォルト値展開と組み合わせる。
  • [ ] はPOSIXの test コマンドの糖衣構文なので、dashなどbash以外のPOSIX準拠シェルでも同じ挙動になる。bash固有の [[ ]] を使っても [[ -n "$STRING" ]] / [[ -z "$STRING" ]] で同様に動く。