Ale*_*kov 9 bash math exit-status
我遇到了这个问题,其作者处理了由以下原因引起的问题:
let x=1-1
exit with code 1。
根据bash 手册:
如果最后一个表达式的计算结果为 0,则 let 返回 1;否则返回 0。(第 56-57 页)
我不太熟悉 bash 的细微差别,所以我的问题是“这种行为的原因是什么?”。可能是因为 0 解释为“假”?对于像我这样的 bash 初学者来说,这有点奇怪,算术表达式的结果 0 会导致错误退出代码......
Kus*_*nda 14
在大多数通用编程语言的布尔上下文中使用时,零整数值的计算结果为false 。这一事实意味着您可能拥有类似于以下 C 代码的代码。
c = 100;
while (--c) { /* do something while c is non-zero */ }
Run Code Online (Sandbox Code Playgroud)
在 shell 中,当在条件上下文中使用时,退出状态 1 的计算结果为false 。
c=100
while let --c; do
# do something while c is non-zero
done
Run Code Online (Sandbox Code Playgroud)
你看到这里的模式了吗?循环while
运行直到let
返回非零退出状态,当c
达到零时它会执行此操作。在这种情况下,非零退出状态并不意味着“错误”,它仅意味着let
到达结果0
。
不过,现在通常let
被替换为((...))
(算术评估),如
c=100
while ((--c)); do ...; done
Run Code Online (Sandbox Code Playgroud)
值得重复的是,while
上面的循环并不关心c
. 他们关心内置let
实用程序和((...))
.