loopcount=1
loopmax=5
while [ $loopcount -le $loopmax ]
do
echo "loop iteration :$loopcount"
((loopcount=loopcount+1))
done
为此我得到这样的o / p
loop iteration :1
loop iteration :2
loop iteration :3
loop iteration :4
loop iteration :5
但如果我将程序((loopcount = loopcount + 1))更改为(loopcount = loopcount + 1),我的输出会低于输出。
loop iteration :1
loop iteration :1
loop iteration :1
loop iteration :1
loop iteration :1
loop iteration :1
获得无限次。 ()和(())的区别是什么?
答案 0 :(得分:2)
workspace://SpacesStore/abd73a24-2728-4638-9899-bb2cda9802ed
表示在子shell中运行给定命令。 (...)
表示在parens中进行算术运算。
请注意,子shell不能更改父shell的变量,因此在您的示例中,您永远不会更新父级中的loopcount值。此外,在您的单个paren示例中,您不会进行算术运算,您将字符串((...))
分配给变量loopcount+1
,这样如果您之后执行loopcount
,您将获得输出printf "%s\n" "$loopcount"
答案 1 :(得分:2)
来自man bash
:
(list)
列表在子shell环境中执行(请参阅下面的COMMAND EXECUTION ENVIRONMENT)。影响shell环境的变量赋值和内置命令在命令完成后不会保持有效。返回状态是列表的退出状态。[...]
((expression))
根据ARITHMETIC EVALUATION下面描述的规则评估表达式。如果表达式的值不为零,则返回状态为0;否则返回状态为1.这完全等同于let "expression"
。