setで-uオプションを指定しておくと、未指定のまま変数を使うのを避けられるので便利です。
ただ、以下のように明示的にエラーメッセージを出したい場合もあります。
test.sh
#!/bin/bashset-uif[[-z"$1"]];then
echo"no arg">&2
echo"Usage: ..."exit 1
fi# 省略...しかし、-uが適用されるため自前でのチェックができません。
bash-3.2$ ./test.sh
./test.sh: line 4: $1: unbound variable
次のように一時的に無効にすれば対応できますが、コードの状態が増えるし、戻し忘れのリスクもあります。
#!/bin/bashset-uset +u # 一時的にuオプションを無効にするif[[-z"$1"]];then# 省略...fi
set-u# 戻すでは、どうするか?
デフォルト値を利用することで、-uオプションのチェックを回避することができます。
Man page of BASH
${parameter:-word}
デフォルトの値を使います。 parameter が設定されていないか空文字列であれば、 word を展開したものに置換されます。そうでなければ、 parameter の値に置換されます。
wordを指定しなければデフォルトに空文字が入るため、自前で空文字チェックができます。
#!/bin/bashset-uif[[-z"${1:-}"]];then# 省略...fi結果
bash-3.2$ ./test.sh
no arg
Usage: ...