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
Comments