外壳脚本变量类型由 if-语句中的第一种数据类型固定?



使用以下脚本时,当我设置 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。始终引用变量扩展!

相关内容

最新更新