BASH算术问题

时间:2012-04-10 01:48:16

标签: bash arithmetic-expressions

我在BASH工作,现在我有一个白痴时刻。我有一个我正在研究的项目,我将需要使用一些非常基本的算术表达式,我才意识到我的很多问题都是因为我的变量没有更新。所以我把一个基本算法放在一起,用另一个变量用一个while循环递增一个变量,直到达到一定数量。

counter=1
counter2=0

while [[ counter2 < 10 ]]; do
   counter2=$(($counter2+$counter))
   echo $counter
   echo $counter2
done 

我运行脚本。什么也没做。我将<设置为>仅用于踢,并且无限循环发生且重复输出:

1
0
1
0

永远,直到我停止它。所以变量显然没有变化。为什么?我觉得这样的白痴,因为它一定是我忽略的愚蠢。为什么,当我有<时,它也不是无限循环?为什么不打印任何东西呢?如果counter2总是小于10,为什么它不会永远继续下去?

提前感谢大家。

编辑:嗯,我知道为什么在支票<时没有输出任何内容...我应该使用$counter2代替counter2来获取counter2的实际值。但现在它只是输出:

1
2

就是这样......我觉得这样一个derp。

3 个答案:

答案 0 :(得分:4)

$((...))内,请勿使用sigil($)。

counter2=$((counter2+counter))

答案 1 :(得分:4)

如果这是全部bash(100%肯定),那么您可以使用declare -i来明确设置变量的类型,然后您的代码将如下所示:

declare -i counter=1
declare -i counter2=0

while [[ $counter2 -lt 10 ]]; do
   counter2=$counter2+$counter
   echo $counter
   echo $counter2
done

编辑: 在bash中,您可以使用双重伪装进行算术比较。所以,你的同时可以写成:

while (($counter2 <  10)) ; do

答案 2 :(得分:1)

在bash中,你可以使用类似c的for循环:

for (( counter2=0; counter2<10; counter2+=counter ))
do
   echo $counter": "$counter2
done

通常你会发现这个结构更有吸引力:

for counter2 in {0..9}
do
    echo $counter": "$counter2
done