反转bash for循环

时间:2014-04-10 00:40:24

标签: linux bash for-loop

我有这个:

for (( count= "$WP_RANGE_START"; count< "$WP_RANGE_STOP"+1; count=count+1 ));

WP_RANGE_START的数字是1,而WP_RANGE_STOP的数字是10。

现在这将继续1,2,... 10

我怎么能这样倒计时?(10,9,... 1)

3 个答案:

答案 0 :(得分:3)

我猜你所拥有的镜像是

for (( count="$WP_RANGE_STOP"; count >= "$WP_RANGE_START"; count=count-1 ));

但写一个不那么麻烦的方法就是

for (( count=WP_RANGE_STOP; count >= WP_RANGE_START; count-- ));

算术上下文中不需要$

在处理文字时,bash有一个使用大括号扩展的范围扩展功能:

for i in {0..10}; # or {10..0} or what have you

但是使用变量很麻烦,因为括号扩展在参数扩展之前发生。在这些情况下,通常更容易使用算术循环。

答案 1 :(得分:0)

您的递增代码可以“简化”为:

for count in $(eval echo {$WP_RANGE_START..$WP_RANGE_STOP});

所以,减少你可以反转参数“

for count in $(eval echo {$WP_RANGE_STOP..$WP_RANGE_START}); 

假设您的bash版本为3或更高,您可以通过将其附加到范围来指定增量或减量,如下所示:

CHANGE=1
for count in $(eval echo {$WP_RANGE_STOP..$WP_RANGE_START..$CHANGE}); 

答案 2 :(得分:0)

for循环是你的问题。

i=11 ; until [ $((i=i-1)) -lt 1 ] ; do echo $i ; done

输出

10
9
8
7
6
5
4
3
2
1

你根本不需要任何基本原理。