typoなんてのは普段よくあることで、そいつに無駄な時間をとられてしまうことが日常茶飯事だ。
#!/usr/bin/env bash MY_NAME="Miku" MY_BIRTHDAY="10/19" MY_HOBBY="Dance" echo $MY_NAME echo $MY_BIRTDAY echo $MY_HOBBY
上記の出力結果はどうなるだろうか。上から"Miku" "10/19" "Dance"と表示されそうなものだが、実際はこうなる。
Miku Dance
MY_BIRTHDAYが出力されていないが、これは変数名を入力し間違えているから。
こういうtypoに気付きやすくするために、set -u を指定すると良い。
#!/usr/bin/env bash set -u MY_NAME="Miku" MY_BIRTHDAY="10/19" MY_HOBBY="Dance" echo $MY_NAME echo $MY_BIRTDAY echo $MY_HOBBY
上記を実行すると、以下のようなエラーとなり、該当箇所で変数を入力し間違えていることに簡単に気づける。
Miku miku.sh: line 10: MY_BIRTDAY: unbound variable
ただ、定義済みと思い込んでいた変数をうっかり使ってしまい上記のエラーに遭遇する場合も多々ある。例えば
#!/usr/bin/env bash set -u PERLLIB=$PERLLIB:$HOME/mylib ...
PERLLIB は Perl においてモジュールパスを指定する環境変数だが、常に定義済みとは限らず、Perl を普段から使っている人だと未定義の場合でもつい上記のように使ってしまいエラーに遭遇しやすいかもしれない(*1)。その場合は問題の箇所のみ set -u の宣言前に移動するとよい。
(*1) 昨日のオイラ