次のようにすると変数が定義されているかどうかチェックできます。
がしかし、この方法は RHEL/CentOS 6 では使えません、Bash のバージョン的な意味で。
RHEL/CentOS 6 では下記の記事のコメントにあるような方法で可能です。
がしかし、大抵の場合「変数が未定義」よりも「変数が未定義または空文字」で条件分岐することの方が多いでしょう。
その場合は次のようにします。
[ -n "${VAL-}" ]
${VAL-}
は変数 VAL が未定義なら、-
以降の文字を展開したものに置換されます。
-
以降になにもないので、要するに空文字に置換されます。
変数 VAL が空文字なら空文字のままなので、「変数が未定義、または、空文字」でチェックできます。
確認用(-v
使っているのでCentOS 7 とかで実行)
cat <<'EOS'|bash
set +u
set -v
unset VAL
[ -v VAL ]; echo $? # 1
[ -n "${VAL+x}" ]; echo $? # 1
[ -n "${VAL-}" ]; echo $? # 1
[ -n "$VAL" ]; echo $? # 1
VAL=
[ -v VAL ]; echo $? # 0
[ -n "${VAL+x}" ]; echo $? # 0
[ -n "${VAL-}" ]; echo $? # 1
[ -n "$VAL" ]; echo $? # 1
VAL=123
[ -v VAL ]; echo $? # 0
[ -n "${VAL+x}" ]; echo $? # 0
[ -n "${VAL-}" ]; echo $? # 0
[ -n "$VAL" ]; echo $? # 0
EOS