Bash:需要整数表达式,使用读取/测试

Bash:需要整数表达式,使用读取/测试

我正在学习 shell 编程的基础知识,所以我写了一些简单的东西,比如

#!/bin/bash
read var1
read var2
if [ var1 -lt var2 ]; then
    echo "var1 is lt var2"
else
    echo "var2 is lt var1"
fi

我的理解是,变量在 Bash 中是无类型的,并且任何变量如果只包含数字,都可以用作整数。但是当我运行这个时,我收到错误“预期的整数表达式”......为什么?

答案1

declare实际上,您可以使用(或旧的)内置函数在变量上设置一些属性typesetdeclare -i var1 var2将在这些变量上设置整数属性。之后,尝试为这些变量设置非整数值的赋值将引发错误。

但你的问题出在语法上。使用变量的值时,必须在其名称前添加前缀$

if [ "$var1" -lt "$var2" ]; then
    echo "$var1 is lt $var2"
else
    echo "$var2 is lt $var1"
fi

算术评估是例外,不需要$

if ((var1<var2)); then
    echo "$var1 is lt $var2"
else
    echo "$var2 is lt $var1"
fi

作为警告,在[..内部]始终用双引号引用变量,以避免单词扩展扰乱表达式的语法。 (我的意思是,您将遇到未设置变量、包含空字符串的变量和包含IFS字符的变量的问题。)或者您可以使用更新更好的[[..]]来正确处理此类情况:

if [[ $var1 -lt $var2 ]]; then
    echo "$var1 is lt $var2"
else
    echo "$var2 is lt $var1"
fi

答案2

您应该在名称前面引用变量$

if [ $var1 -lt $var2 ] ; then...

相关内容