小ネタです。
test -n
は文字列の長さが0 より 大きい場合にtrue
を返します。
よって以下のコードは ZERO length
を返すことが期待されます。
NO_STR=
if [ -n $NO_STR ]
then
echo "NON ZERO length"
return
fi
echo "ZERO length"
が結果としては、NON ZERO length
が出力されます。
なぜ?
答えはこちら
結論としては、以下のようにダブルクォートで囲めばいいわけですな。
NO_STR=
if [ -n "$NO_STR" ]
then
echo "NON ZERO length"
return
fi
echo "ZERO length"
元のコードでは文字列が存在しない場合、 [ -n ]
となり、これは常にtrueを返してしまうとのこと。
なるほどなー。