我正在通过HackerRank.There学习BASH。有一个练习,给出三角形的长度,然后你需要找出三角形是等腰、等边还是等边。我写了以下代码:
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但是我得到了下面的错误
solution.sh: line 4: [: too many arguments
solution.sh: line 7: [: too many arguments
solution.sh: line 7: [: too many arguments为什么会发生这种情况?我花了很长时间努力去纠正它,但都没有结果。
发布于 2015-01-25 00:09:10
您可以组合条件,省略方括号,如下所示
if [ "$a" -eq "$b" ] && [ "$b" -eq "$c" ]或者将条件与-a/-o组合,如下所示
if [ "$a" -eq "$b" -a "$b" -eq "$c" ]请参阅http://wiki.bash-hackers.org/commands/classictest#and_and_or
发布于 2015-01-25 00:15:54
&&和||是Bash list运算符。在命令链中,仅当前一个命令返回0 (&&)或非零(||)时才执行下一个命令。
[是Bash内部test命令的别名,具有-eq或-ne等参数。]结束其命令行。键入help test以了解详细信息。
因此,如果你写一个条件表达式,你不会把列表运算符放在括号里。
例如,尝试使用以下代码,而不是代码中的相应行:
if [ "$a" -eq "$b" ] && [ "$b" -eq "$c" ]
then发布于 2015-01-25 08:48:35
[不是bash中的分组操作符,您不能使用它对测试进行分组。
有许多不同的方法来表示您想要进行的测试,数值计算模式可能是最容易阅读的
if (( a == b && b == c ))
if (( a == b || b == c || c == a ))如果你有小数,这将会中断,但对于整数将会工作得很好。
https://stackoverflow.com/questions/28127253
复制相似问题