我正在学习 shell 编程的基础知识,所以我写了一些简单的东西,比如
#!/bin/bash
read var1
read var2
if [ var1 -lt var2 ]; then
echo "var1 is lt var2"
else
echo "var2 is lt var1"
fi
Run Code Online (Sandbox Code Playgroud)
我的理解是变量在 Bash 中是无类型的,并且任何变量如果只包含数字就可以用作整数。但是当我运行它时,我收到错误“预期的整数表达式”......为什么?
man*_*ork 11
实际上,您可以使用declare(或旧的typeset)内置函数为变量设置一些属性。declare -i var1 var2将在这些变量上设置整数属性。之后,尝试为这些变量设置非整数值的赋值将引发错误。
但是您的问题在于语法。使用变量的值时,您必须在其名称前加上$:
if [ "$var1" -lt "$var2" ]; then
echo "$var1 is lt $var2"
else
echo "$var2 is lt $var1"
fi
Run Code Online (Sandbox Code Playgroud)
算术评估除外,其中不需要$:
if ((var1<var2)); then
echo "$var1 is lt $var2"
else
echo "$var2 is lt $var1"
fi
Run Code Online (Sandbox Code Playgroud)
作为警告,在[.. 中]始终双引号您的变量,以避免单词扩展弄乱您的表达式语法。(我的意思是,您会遇到未设置变量、包含空字符串的变量和包含IFS字符的变量的问题。)或者您可以使用更新更好的[[..]]来正确处理此类情况:
if [[ $var1 -lt $var2 ]]; then
echo "$var1 is lt $var2"
else
echo "$var2 is lt $var1"
fi
Run Code Online (Sandbox Code Playgroud)