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
Built with Hugo
テーマ StackJimmy によって設計されています。