为什么当计算结果等于0时'let'以代码1退出?

为什么当计算结果等于0时'let'以代码1退出?

我碰到问题的作者处理了由以下原因引起的问题: let x=1-1以代码 1 退出。

根据bash手册:

如果最后一个表达式的计算结果为 0,则 let 返回 1;否则返回 0。 (第 56-57 页)

我不太熟悉 bash 的细微差别,所以我的问题是“这种行为的原因是什么?”。可能是因为 0 解释为“假”?对于像我这样的 bash 初学者来说,这有点奇怪,算术表达式的结果 0 会导致错误退出代码......

答案1

零整数值的计算结果为错误的在大多数通用编程语言中用于布尔上下文时。这一事实意味着您可能拥有类似于以下 C 代码的代码。

c = 100;
while (--c) { /* do something while c is non-zero */ }

在 shell 中,退出状态 1 的计算结果为错误的当在条件上下文中使用时。

c=100
while let --c; do
    # do something while c is non-zero
done

你看到这里的模式了吗?循环while运行直到let返回非零退出状态,当c达到零时它会执行此操作。在这种情况下,非零退出状态并不意味着“错误”,它仅意味着let到达结果0

不过,现在通常let被替换为((...))(算术评估),如

c=100
while ((--c)); do ...; done

值得重复的是,while上面的循环并不关心c.他们关心内置let实用程序和((...)).

相关内容