search
LoginSignup
16

More than 5 years have passed since last update.

Organization

set -u してるときに変数が未定義または空文字かチェックする for RHEL/CentOS 6

次のようにすると変数が定義されているかどうかチェックできます。

がしかし、この方法は 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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
16