Alexander Blazhkov Asked: 2021-10-05 08:43:51 +0800 CST2021-10-05 08:43:51 +0800 CST 2021-10-05 08:43:51 +0800 CST 当计算结果等于 0 时,为什么 'let' 以代码 1 退出? 772 我遇到了这个问题,其作者处理了由以下原因引起的问题: let x=1-1以代码 1 退出。 根据bash手册: 如果最后一个表达式的计算结果为 0,则 let 返回 1;否则返回 0。(第 56-57 页) 我对 bash 的细微差别不太熟悉,所以我的问题是“这种行为的原因是什么?”。可能是因为 0 解释为“假”?对于像我这样的 bash 初学者来说,算术表达式的结果为 0 会导致错误退出代码,这有点奇怪...... bash exit-status 1 个回答 Voted Best Answer they 2021-10-05T09:13:34+08:002021-10-05T09:13:34+08:00 在大多数通用编程语言的布尔上下文中使用时,零整数值的计算结果为false 。这一事实意味着您可能拥有类似以下 C 代码的代码。 c = 100; while (--c) { /* do something while c is non-zero */ } 在 shell 中,在条件上下文中使用时,退出状态为false 。 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内置实用程序和((...)).
在大多数通用编程语言的布尔上下文中使用时,零整数值的计算结果为false 。这一事实意味着您可能拥有类似以下 C 代码的代码。
在 shell 中,在条件上下文中使用时,退出状态为false 。
你看到这里的模式了吗?
while
循环运行直到返回一个let
非零退出状态,它在c
达到零时执行。在这种情况下,非零退出状态并不意味着“错误”,它只意味着let
到达了结果0
。但是,现在通常
let
用((...))
(算术评估)代替,如值得重复的是,
while
上面的循环并不关心c
. 他们关心let
内置实用程序和((...))
.