状況
キャッシュを消すスクリプトのレビュー。WORK_DIR は呼び出し側で設定する前提だが、設定し忘れると rm -rf "/cache" が実行されてしまう。
未定義の変数でスクリプトを止めるには、空欄に何を入れる?
#!/bin/bash____rm -rf "$WORK_DIR/cache"正答
- set -e
- set -x
- set -v
- set -u
解説
set -u(nounset)を付けると、未定義の変数を展開しようとした時点でエラーになり、rm は実行されない。付けないと $WORK_DIR が空文字に展開され、ルート直下の /cache を消しにいく。set -e はコマンドが失敗したら止めるだけで、空の変数は失敗扱いにならないので防げない。set -x と set -v は実行内容を表示するだけである。${WORK_DIR:?} と書いて、その変数だけ未定義なら止める方法もある。
参考: www.gnu.org
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ