当我在算术比较中遇到这个问题时,我正在尝试学习 shell 脚本并按照教程点上的教程进行操作。
$VAL1=10
$VAL2=20
$VAL3=10
if [ $VAL1 == $VAL2 ]
then
echo "equal"
else
echo "not equal"
fi
但我得到了一个[: ==: unexpected operator
我不确定为什么比较运算符不起作用。我知道我也可以使用有理运算符,但我想知道为什么没有定义"=="。
您要将其更改为:
VAL1=10
VAL2=20
VAL3=10
if [ "$VAL1" -eq "$VAL2" ]
then
echo "equal"
else
echo "not equal"
fi
解释:
- 不要在赋值中添加左值(正在分配的变量)的
$
。 - 在测试中始终用双引号包装变量。您得到
[: ==: unexpected operator
错误是因为,由于之前没有正确分配VAL1
/VAL2
,因此测试的 ksh 扩展实际上最终解析为:if [ == ]
- (但你看到这实际上不是关于未定义==
的问题) - 使用以下内容进行数值比较,而不是
==
表示法:-
-eq
(==) -
-ne
(!=) -
-gt
(>) -
-ge
(>=) -
-lt
(<) -
-le
(<=)
-