Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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
比较无法正常工作的数字(黑客等级中的Bash脚本)_Bash_Macos_Shell_Sh - Fatal编程技术网

比较无法正常工作的数字(黑客等级中的Bash脚本)

比较无法正常工作的数字(黑客等级中的Bash脚本),bash,macos,shell,sh,Bash,Macos,Shell,Sh,根据以下链接中所述的问题: 我的代码在MacOSX终端上运行良好,但在Hackerrank中提交相同的代码时,其中一个测试用例失败了。我不知道为什么会这样。如果有任何答案,我将不胜感激 read X read Y if [[ $X > $Y ]] then echo "X is greater than Y" elif [[ $X < $Y ]] then echo "X is less than Y" else echo "X is equal

根据以下链接中所述的问题:

我的代码在MacOSX终端上运行良好,但在Hackerrank中提交相同的代码时,其中一个测试用例失败了。我不知道为什么会这样。如果有任何答案,我将不胜感激

 read X
 read Y

 if [[ $X > $Y ]]
 then 
   echo "X is greater than Y"
 elif [[ $X < $Y ]]
 then
   echo "X is less than Y"
 else
   echo "X is equal to Y"
 fi

 HackerRank Custom Test Case:

 Compilation Successful
 Input (stdin)
 -100
 100
 Your Output
 X is greater than Y
readx
阅读
如果[[$X>$Y]]
然后
回声“X大于Y”
elif[$X<$Y]]
然后
回声“X小于Y”
其他的
回声“X等于Y”
fi
HackerRank自定义测试用例:
编译成功
输入(标准输入)
-100
100
你的产出
X大于Y

我不知道你为什么会得到这个结果;在实际bash中,我得到“X小于Y”。但是,您的脚本实际上在另一方面是错误的:在
[[]]
中,
进行字母比较,而不是数字比较。为了理解差异,请考虑<代码> [〔5<1000〕〕/代码>将作为假,因为“5”在字符排序之后出现在“1”之后。要进行数值比较,请使用
-lt
-gt

我不确定为什么会得到这个结果;在实际bash中,我得到“X小于Y”。但是,您的脚本实际上在另一方面是错误的:在
[[]]
中,
进行字母比较,而不是数字比较。为了理解差异,请考虑<代码> [〔5<1000〕〕/代码>将作为假,因为“5”在字符排序之后出现在“1”之后。要进行数值比较,请使用
-lt
-gt

您可以使用Bash上下文
(…)
与测试上下文
[[…]]
进行更典型的算术比较:

x=-5
y=5

if ((x>y)); then 
    echo "X is greater than Y"
elif ((x<y)); then
    echo "X is less than Y"
else
    echo "X is equal to Y"
fi
[…]]
内部,
==
测试字符串比较

这两种方法都只适用于整数;要使用浮点,需要使用
awk
bc
或其他浮点解释器。确保在
[[test]]
中使用双引号
“$x”
(())

使用用户输入,确保测试
$x
$y
是否为实际值 数字。好的测试…

您可以使用Bash上下文
(…)
vs测试上下文
[…]]
来获得更典型的算术比较:

x=-5
y=5

if ((x>y)); then 
    echo "X is greater than Y"
elif ((x<y)); then
    echo "X is less than Y"
else
    echo "X is equal to Y"
fi
[…]]
内部,
==
测试字符串比较

这两种方法都只适用于整数;要使用浮点,需要使用
awk
bc
或其他浮点解释器。确保在
[[test]]
中使用双引号
“$x”
(())

使用用户输入,确保测试
$x
$y
是否为实际值
数字。好的测试…

之前、之后、更大、更小——我仍然依靠我的手指正如问题陈述中所述,我在Mac终端上也得到了正确的答案。但在Hackerrank上提交解决方案时,它显示了上述错误。虽然我很高兴,因为评论内容丰富。之前、之后、更大、更小——我仍然用手指数着!;-)正如问题陈述中所述,我在Mac终端上也得到了正确的答案。但在Hackerrank上提交解决方案时,它显示了上述错误。虽然我很高兴,因为评论内容非常丰富。你的解决方案在Mac终端和HackerRank上都有效。我知道我做错了什么,但现在的问题是为什么我的解决方案在Mac终端而不是在HackerRank中工作。HackerRank的问题是如何读取x和y的值。如果您将
read x
read y
放在代码提交的顶部,我这里的两种解决方案都有效。您的解决方案在Mac终端和HackerRank上都有效。我知道我做错了什么,但现在的问题是为什么我的解决方案在Mac终端而不是在HackerRank中工作。HackerRank的问题是如何读取x和y的值。如果您将
read x
read y
放在代码提交的顶部,我这里的两种解决方案都有效。