使用以下脚本时,当我设置 X=hello 或除 interger 以外的其他类型时,总是会出现错误。 我想知道 X 的类型是否在第一次有条件的情况下固定?
X=hello
[ $X -ne 0 ] && echo "X isn't zero" || echo "X is zero"
[ -f $X ] && echo "X is a file" || echo "X is not a file"
[ -n $X ] && echo "X is of non-zero length" ||
echo "X is of zero length"
结果是:
[: integer expression expected: hello
X is zero
X is not a file
X is of non-zero length
但我们知道这不是我们想要的。如何修改代码?
-ne
是一个算术运算符,如果其操作数不是整数,则会抱怨。对于字符串比较,请使用!=
。
[ "$X" != 0 ] && echo "X isn't zero" || echo "X is zero"
此外,"$X"
周围的引号是必需的$X
以防万一为空。您希望比较在比较时[ "" != 0 ]
,而不是[ != 0 ]
,这是如果$X
没有引号就会发生的事情。后者是语法错误。
这对于第三个测试尤其重要,[ -n "$X" ]
.如果你没有引号[ -n $X ]
即使$X
为空也会成功![ -n "" ]
将正确返回 false,但[ -n ]
将返回 true。始终引用变量扩展!