我在将 shell 参数与字符串进行比较时收到此错误。如果代码如下所示:
online=true
if [ "$2" -eq '-o' ]
then
online=false
fi
echo $online
然后对于例如输入我得到这些结果:
$ ./currency.sh 2 -o
./currency.sh: line 13: [: -o: integer expression expected
true
答案1
在这一行中:
if [ "$2" -eq '-o' ]
您使用了算术运算符-eq
,它将第二个参数作为数字。
当然,仅仅因为这个原因它就失败了。
比较字符串时,可以使用POSIX =
操作员:
if [ "$2" = '-o' ]
请注意,这个版本应该在所有 shell 中工作,因为它是由POSIX(便携式操作系统接口)。
如果你想重击-具体版本:
if [[ "$2" == '-o' ]]
请注意,此版本仅适用于Bash(谍影重重 shell)和类似的。
相反,双括号[[ .. ]]
和==
运算符都定义在重击仅在其他 shell 中不起作用。