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))"