環境変数のチェック

シェルスクリプトで、実行のために必要な環境変数が定義されていることを確認するために、こんなしかけを書いてみた。

for n in VERSION WORKDIR SDKROOT TARGET KEY; do
  if ! [ $(eval echo "$"$n ]; then
    echo "ERROR: missing environment '$n' (at ${0}); exit 1
  fi
done

この場合 VERSOIN, WORKDIR, SDKROOT, TARGET, KEY の環境変数が与えられていることを確認し、どれかが欠けていたら(エラーメッセージをプリントして)抜ける。
(依存する環境変数が二、三だったら if ! [ $VAR1 ] || ! [ $VAR2]; then ... のように if 文の条件部に列挙するのもありだろう)

ポイントは変数に代入された文字を、環境変数としてさらに評価するために eval を使っているところ。

${$n} みたいに書けば評価してくれるんじゃない? と単純に考えてやってみたら "Bad substitution" (そんな置換はできません)と怒られてしまい解決に悩んだので、こうしてメモを残しておく次第。