(loopcount = loopcount + 1)和((loopcount = loopcount + 1))之间有什么区别?

时间:2016-02-15 13:21:06

标签: linux shell while-loop

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

获得无限次。 ()和(())的区别是什么?

2 个答案:

答案 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"