Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我从[${guess[0]}-eq num]得到bash整数表达式错误?_Bash - Fatal编程技术网

为什么我从[${guess[0]}-eq num]得到bash整数表达式错误?

为什么我从[${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

我试图提示用户猜测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"
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兼容,从而与
    #兼容/bin/sh
    安装在所有具有POSIX兼容外壳的系统上
  • 当使用
    test
    (或
    [
    )时,需要扩展变量。
    $num
    ,而不是bare
    $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。这是正确的。我将接受帖子