我注意到bash(())表示法的返回状态明显不一致.
考虑以下
考虑以下
$> A=0 $> ((A=A+1)) $> echo $? $A 0 1
但是使用其他众所周知的速记增量表示法产生:
$> A=0 $> ((A++)) $> echo $? $A 1 1
如果脚本中有内置set -e,则第二种表示法将导致脚本退出,因为((A))的退出状态返回非零.这个问题在this related question中或多或少得到解决.但它似乎没有解释两种符号((A = A 1))和((A))退出状态的差异
((A))当且仅当A等于0时似乎返回1.(免责声明:我没有做过详尽的测试.在bash 4.1.2和4.2.25中测试过).所以最后的问题归结为:
为什么A = 0; ((A))返回1?
a是后递增:它在评估语句后递增.相比之下,增量之前.从而:
$a=0 ; ((a++)) ; echo $a $? 1 1 $a=0 ; ((++a)) ; echo $a $? 1 0
在第一种情况下,((a)),首先计算算术表达式,而a仍然为零,产生零值(因此产生非零返回状态).然后,之后,a递增.
在第二种情况下,a增加到1然后评估((…)).由于a在计算算术表达式时非零,因此返回状态为零.
来自man bash:
id++ id-- variable post-increment and post-decrement ++id --id variable pre-increment and pre-decrement
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。