bash - 在 bash 中具有算术比较行为的 If 语句

标签 bash

我正在学习 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/

相关文章:

linux - 如何用sed替换静态位置的字符串并且不删除空格

linux - 如何在 unix shell 脚本中将时间添加到日期?

arrays - 从 bash 输出中获取值

bash - 在 Firefox 的 newtabs 中打开文件中的 url

bash - 在 xargs 变量上使用 sed 在 shell 扩展中不起作用

bash - 列出最近 5 分钟内修改的所有文件,不包括 .svn 目录

bash - 如何更改Docker终端启动脚本?

bash - 如何清理 masscan 输出 (-oL)

linux - 使用shell脚本重命名文件

linux - 列出目录和子目录中的所有 xml 文件