为什么 bashincrement: `n=0;((n++));` 返回错误?

为什么 bashincrement: `n=0;((n++));` 返回错误?
n=0;
((n++));echo "ret=$?;n=$n;"
((n++));echo "ret=$?;n=$n;"
((n++));echo "ret=$?;n=$n;"

n=1开始, 只有当返回错误 并且我正在使用导致出现问题的情况时((n++)),才能正常工作
n=0((n++))
trap '' ERR

这是一些错误吗?

答案1

这是因为 的返回值(( expression ))不用于错误指示。从bash联机帮助页:

((表达))

表达根据下面描述的规则进行评估算术评估。如果表达式的值非零,则返回状态为0;否则返回状态为 1。这完全等同于表达”。

所以,在你的情况下,因为表达式的值零, 的返回状态为(( ... ))1。

答案2

原因正如pmos上面所写。

一种解决方案是使用((++n))增量。您的表达式永远不会计算为零,因此看起来永远不会导致错误。

答案3

你应该做:

echo "$((n+=1))"

它不会引发任何陷阱——它唯一的回报来自于echo

或者,如果您希望将其用作独立的,在$n少于 20 位数字的情况下,以下两种形式始终返回 true:

n=$((n+1))

或者 :

: "$((n+=1))"

相关内容