中の値を見ると Line Feedが入っているようです。
はどうやって確認しましたか?設定しないのであれば空ですので、確認の仕方が間違っていると思われます。
ARG
が空の場合、if [ -n $ARG]
は、if [ -n ]
となりますが、[ ]
の中に文字列(この場合-n
)が1つだけの場合は、空文字列でない限り内容にかかわらず真となりますので、echo "has arg"
が実行されます。
ARG
が空でない場合、例えばabc
だと、if [ -n abc]
となるので、エラーです。]
の前に空白が必要です。
一般に、変数参照時は、絶対に空でないことが保証できる場合以外は、二重引用符で囲みます。(*
など、一部シェルの特殊文字を含む可能性がゼロでない場合も囲む)
つまり、if [ -n "$ARG" ]
が正しいです。
参考:
Bash
1[ ] ⇒ 偽 引数がゼロ個なら偽
2[ "" ] ⇒ 偽 空文字列が「空かどうかの判断対象文字列」とみなされ、空なので偽
3[ -n ] ⇒ 真 -n が演算子じゃなくて「空かどうかの判断対象文字列」とみなされ、空じゃないので真
4[ -n "" ] ⇒ 偽 -n は演算子。""が空なので偽
5[ -n -n ] ⇒ 真 1つ目の -n は演算子。2つ目は空かどうかの判断対象文字列で、空じゃないので真
6
7[ -z ] ⇒ 真 -z が演算子じゃなくて「空かどうかの判断対象文字列」とみなされ、空じゃないので真
8[ -z "" ] ⇒ 真 -n は演算子。""が空なので真
9[ -z -z ] ⇒ 偽 1つ目の -z は演算子。2つ目は空かどうかの判断対象文字列で、空じゃないので偽
さらに参考:
man bash
のtest
コマンドの説明のところ。