Bash で変数が定義されているかどうかを確認するときは -n
や -z
を使う。
if[-z"${FOO}"];then# FOO が未定義時の処理fi
しかし set -u
しているときは使えない。
set-uif[-z"${FOO}"];then# FOO が未定義時の処理fi
FOO: unbound variable
Bash v4 以上であれば -v
が使えるらしい。
参考: set -uしてるときに変数が定義されてるかチェックする - Qiita
if[[!-v FOO ]];then# FOO が未定義時の処理fi
しかし macOS (Bug Sur 時点) に入っている Bash は v3 なので、この方法は使えない。
Bash v3 以下では、デフォルト値を使って工夫すれば以下のように書くことで実現できる。
参考: Bash v3 以下でも set -u 時に変数が定義されてるか確認する方法 / マスタカの ChangeLog メモ
if[-z"${FOO:-}"];then# FOO が未定義時の処理fi