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