shell script -n演算子

最近仕事でシェルスクリプトを作成している。
これがナカナカややこしい特性をもっていたりする。
いや、それが便利な部分であったりもするから、目は瞑る。
にしても、今日ははまった!

変数に文字列が含まれているかを判定する演算子で-nというのがある。

if [ -n $hoge ];then

なんてするわけだ。

$hogeに「AAAA」なんて入っていればこのままでも使えるのだが、「あああ いいい」なんてなってるとそうも行かなくなる。
$hogeは、すぐに実際の文字列に置き換えられると考えればいい。
つまり

if [ -n あああ いいい ];then

となってしまうわけだ。

正解は

if [ -n "$hoge" ];then

というように、クォートしてあげればいい。
この感覚は、特殊な感じである。