为什么我从[${guess[0]}-eq num]得到bash整数表达式错误?
我试图提示用户猜测0-9之间的值。我得到了预期的错误整数表达式。我不明白为什么有人能解释我错在哪里为什么我从[${guess[0]}-eq num]得到bash整数表达式错误?,bash,Bash,我试图提示用户猜测0-9之间的值。我得到了预期的错误整数表达式。我不明白为什么有人能解释我错在哪里 num=8 echo "Enter a value between 0-9" read -a guess if [ ${guess[0]} -eq num ] ; then echo "You guesses the right number" elif [ ${guess[0]} -gt num ] ; then echo "You guessed too high" el
num=8
echo "Enter a value between 0-9"
read -a guess
if [ ${guess[0]} -eq num ] ; then
echo "You guesses the right number"
elif [ ${guess[0]} -gt num ] ; then
echo "You guessed too high"
elif [ ${guess[0]} -lt num ] ; then
echo "You guess too low"
fi
要仅对此代码正确运行所需的最少更改次数,请执行以下操作:
#!/bin/sh
num=8
echo "Enter a value between 0-9"
read guess
if [ "$guess" -eq "$num" ] ; then
echo "You guesses the right number"
elif [ "$guess" -gt "$num" ] ; then
echo "You guessed too high"
elif [ "$guess" -lt "$num" ] ; then
echo "You guess too low"
fi
注:
- 由于您只读取一个值,因此没有令人信服的理由使用数组,只需将
参数去掉即可-a
;这样做还可以使您的代码与POSIX sh兼容,从而与读取
安装在所有具有POSIX兼容外壳的系统上#兼容/bin/sh
- 当使用
(或test
)时,需要扩展变量。[
,而不是bare$num
;后者仅在数字上下文中可用,而$num
是解析器关注的常规命令——它不会在语法级别创建任何特殊上下文test
- 因为
是一个常规命令,所以它后面需要空格,就像其他命令名一样[
- 因为
是一个常规命令,所以在它期望作为最后一个参数的[
之前需要空格,这与将参数传递给其他任何对象时一样]
- 如果shell是bash(脚本以
开头),那么可以使用数学上下文:#!/bin/bash
,或者If((guess==num))
。这是一个数学上下文,并且具有特殊的解析规则If((guess>num))
${num[0]}
而不是num
!@F.Hauri:num
不是数组;虽然${num[0]}
也可以工作,“$num”
是正确的方法。@mklement0这是个笑话,但如果${guess[0]}
工作,也可以${num
也可以!@F.Hauri${:)[0]}
。是的,我在发布时出现了一些错误,但这是有效的。我仍在尝试学习bash。这是正确的。我将接受帖子