【发布时间】:2022-10-24 05:18:30
【问题描述】:
read X
read Y
read Z
if [ $X = $Y = $Z ]
then
echo EQUILATERAL # ALL X, Y, Z ARE EQUAL
elif [[ $X = $Y || $X = $Z || $Y = $Z ]]
then
echo ISOSCELES # ONLY 2 VARIABLES ARE EQUAL
else
echo SCALENE # NONE IS EQUAL
fi
好吧,我这里有两个问题,首先是 $X = $Y = $Z 的用法是否有效。其次,当我输入 3 个类似变量时,它会打印 ISOSCELES 而不是 EQUILATERAL。是逻辑错误,还是第一部分在语法上不正确?
【问题讨论】:
-
Bash 没有像
[ $X = $Y = $Z ]这样的东西 你需要[ "$X" = "$Y" ] && [ "$Y" = "$Z" ]总是将你的代码发布到 ShellCheck 以首先解决这样的小问题,然后如果你仍然有问题,请在此处发布。 -
不要在一篇文章中问两个问题。使用单独的帖子,特别是因为您的第二个问题没有意义,除非第一个问题已解决:您的程序不会打印您在问题中描述的内容,而只是抛出一条错误消息bash:[:参数太多因为错误的
if声明。 -
你错过了一些可能性:什么类型是 (x=1,y=1,z=2) 或 (x=1,y=1,z=3)?
-
@DavidC.Rankin 您可能可以在这里将您的评论变成答案?因为这本质上是 OP 所要求的
-
@TheDreamsWind - 你为什么不继续写下来。来自 cmets 的一个很好的集合,包括关于 ShellCheck 的提示将为这个问题提供一个很好的答案。我只是从“您的代码中有以下语法错误。(项目符号 A、B、C)”开始,然后解释 bash 的要求(包括在
[ ... ]或 @987654328 中使用双引号的要求@(同义词)。如果您需要参考,我喜欢 man7.org 页面,例如 man 1 bash