Bash Tips (未定義変数)

Qiitaシェルスクリプトで便利な小技“set -u” の解説があり

スクリプト中で値が設定されていない変数を参照した場合に エラーメッセージを表示してスクリプトを終了させる。シェル変数や環境変数を typo した場合など、 変数に値が設定されていない事で発生する問題が回避できる。

おお、これは便利!!(root で動かす shell script で rm -fr 使うのってすごくコワイ)

$ cat test.sh
#!/bin/sh
set -u
work_dir=/tmp
rm -fr ${work_dri}/*

$ ./test.sh
./test.sh: 4: ./test.sh: work_dri: parameter not set

で、Bash をもっと深く知ろうと思い

入門bash 第3版電子版)を買ってパラパラ見てたら

「4.3.1 文字列演算子の構文」

${variable:?message}

というのが載ってました。
出来ることはほぼ “set -u” と変わらないのですが、

$ cat test.sh
#!/bin/sh
set -u
work_dir=/tmp
rm -fr ${work_dri:?}/*

$ ./test.sh
./test.sh: 4: ./test.sh: work_dri: parameter not set or null

「not set」だけじゃなくて「or null」と表示されてますね。そして、そこを任意のメッセージにすることもできます。

$ cat test.sh
#!/bin/sh
set -u
work_dir=/tmp
rm -fr ${work_dri:?"test message"}/*

$ ./test.sh
./test.sh: 4: ./test.sh: work_dri: test message

コメント