oinume journal

Scratchpad of what I learned

Shellでset -uした時の引数の取り扱い

 

#!/bin/sh

 

DIR=$1

 

rm -rf $DIR/

 

なんてやると$1がなかった時に / が消されてしまうので非常に危険。こういう場合は set -u して、未定義の変数があればエラーにすることが推奨される。

 

/Users/kazuhiro/Dropbox/code/sh/set_u.sh: line 3: $1: unbound variable

 

 

ただし、 set -u すると引数の個数を$#を使って、いちいちチェックしないといけない。

 

 

#!/bin/sh

set -u

 

# 引数のサイズをチェック

if [ $# -le 1 ]; then

exit 1

fi

DIR=$1

 

rm -rf $DIR/

 

 

ちょっと面倒だけど set -u している時は $# 使いましょうということで。