我正在学习 bash,我注意到一些我(还)无法解释的奇怪现象。在学校我了解到 if 语句将 0 评估为真,将 1 评估为假,因此它可以与来自其他命令的状态代码一起使用。现在是我的问题:为什么会发生这种情况:
echo $((5>2)) #prints 1
echo $((5<2)) #prints 0
if ((5>2)) ; then echo "yes" ; else echo "no" ; fi #prints yes
if ((5<2)) ; then echo "yes" ; else echo "no" ; fi #prints no
这似乎不合逻辑。 bash 如何知道我使用的是算术表达式而不是其他命令?
最佳答案
您混淆了命令替换的输出和算术上下文的返回值。
命令替换的输出为 1
表示真,0
表示假。
如果结果为真(即非零),则 (( ))
的返回值为 0(成功),否则为 1。
if
查看返回值,而不是命令的输出。
关于bash - 在 bash 中具有算术比较行为的 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30124804/