首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BASH中出现"[:too many“错误

BASH中出现"[:too many“错误
EN

Stack Overflow用户
提问于 2015-01-24 23:54:27
回答 4查看 8.6K关注 0票数 2

我正在通过HackerRank.There学习BASH。有一个练习,给出三角形的长度,然后你需要找出三角形是等腰、等边还是等边。我写了以下代码:

代码语言:javascript
复制
read a
read b
read c
if  [ [ "$a" -eq  "$b" ] && [ "$b" -eq  "$c" ] ]  
then 
    echo "EQUILATERAL"
    elif  [ [ "$a" -eq "$b" ] || [ "$b" -eq  "$c" ] ]  
    then
    echo "ISOSCELES"
    else
    echo "SCALENE"
    fi

但是我得到了下面的错误

代码语言:javascript
复制
solution.sh: line 4: [: too many arguments
solution.sh: line 7: [: too many arguments
solution.sh: line 7: [: too many arguments

为什么会发生这种情况?我花了很长时间努力去纠正它,但都没有结果。

EN

回答 4

Stack Overflow用户

发布于 2015-01-25 00:09:10

您可以组合条件,省略方括号,如下所示

代码语言:javascript
复制
if [ "$a" -eq  "$b" ] && [ "$b" -eq  "$c" ]

或者将条件与-a/-o组合,如下所示

代码语言:javascript
复制
if [ "$a" -eq  "$b" -a "$b" -eq  "$c" ]

请参阅http://wiki.bash-hackers.org/commands/classictest#and_and_or

票数 2
EN

Stack Overflow用户

发布于 2015-01-25 00:15:54

&&||是Bash list运算符。在命令链中,仅当前一个命令返回0 (&&)或非零(||)时才执行下一个命令。

[是Bash内部test命令的别名,具有-eq-ne等参数。]结束其命令行。键入help test以了解详细信息。

因此,如果你写一个条件表达式,你不会把列表运算符放在括号里。

例如,尝试使用以下代码,而不是代码中的相应行:

代码语言:javascript
复制
if  [ "$a" -eq  "$b" ] && [ "$b" -eq  "$c" ]
then
票数 0
EN

Stack Overflow用户

发布于 2015-01-25 08:48:35

[不是bash中的分组操作符,您不能使用它对测试进行分组。

有许多不同的方法来表示您想要进行的测试,数值计算模式可能是最容易阅读的

代码语言:javascript
复制
 if (( a == b && b == c ))

 if (( a == b || b == c || c == a ))

如果你有小数,这将会中断,但对于整数将会工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28127253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档