危険察知4 択難易度 標準

状況

キャッシュを消すスクリプトのレビュー。WORK_DIR は呼び出し側で設定する前提だが、設定し忘れると rm -rf "/cache" が実行されてしまう。

未定義の変数でスクリプトを止めるには、空欄に何を入れる?

#!/bin/bash____rm -rf "$WORK_DIR/cache"

正答

  1. set -e
  2. set -x
  3. set -v
  4. set -u

解説

set -u(nounset)を付けると、未定義の変数を展開しようとした時点でエラーになり、rm は実行されない。付けないと $WORK_DIR が空文字に展開され、ルート直下の /cache を消しにいく。set -e はコマンドが失敗したら止めるだけで、空の変数は失敗扱いにならないので防げない。set -x と set -v は実行内容を表示するだけである。${WORK_DIR:?} と書いて、その変数だけ未定義なら止める方法もある。

参考: www.gnu.org

bashsetunset-variablerm

この問題を含む 危険察知 のテストを制限時間つきで解く

危険察知クイズへ