我在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。
答案 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