迭代范围shell

时间:2014-06-26 09:07:48

标签: shell zsh

for a in bar
do
    for b in 1000000
    do
        montage -geometry 500 $a-$b-*-${0..20000..1000}.png \
        $a-$b-${0..20000..1000}-final.jpg
    done
done

我无法使用0 1000 2000 ... 20000获取编号为$(0..20000.1000)的所有图片。

在shell中还有其他方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:1)

$

之前必须没有{START..END..STEP}
% echo -{0..20000..1000}-                                    
-0- -1000- -2000- -3000- -4000- -5000- -6000- -7000- -8000- -9000- -10000- -11000- -12000- -13000- -14000- -15000- -16000- -17000- -18000- -19000- -20000-

话虽如此,你需要一个循环来重复这些数字。包含范围的单词仅由其扩展替换。这意味着命令行仅为每个元素调用,而是为所有元素一起调用。这也意味着,即使您使用相同的范围两次,它们的扩展也不会很方便地组合。

比较

% echo start a-{1..3}-b A-{1..3}-B end
start a-1-b a-2-b a-3-b A-1-B A-2-B A-3-B end

% for n in {1..3}; do echo start a-$n-b A-$n-B end; done
start a-1-b A-1-B end
start a-2-b A-2-B end
start a-3-b A-3-B end

所以在你的例子中而不是

montage -geometry 500 $a-$b-*-${0..20000..1000}.png \
    $a-$b-${0..20000..1000}-final.jpg
你可能想做

for n in {0..20000..1000}; do
    montage -geometry 500 $a-$b-*-$n.png $a-$b-$n-final.jpg
done

答案 1 :(得分:0)

#!/usr/bin/env python

import os

file_names= ["a","b"]


ranges =  list(xrange(0, 20000, 1000))
l_s = list()
for f in range(0, len(file_names)):
    for a in range(0, len(ranges)):
        stringing = str(file_names[f]) + "--1000000-0-0-0-1-" + str(ranges[a]) + ".log.png"
        l_s.append(stringing)

    final = " ".join(l_s)
    foo = "montage -geometry 500 " + str(final) + " " + str(file_names[f])+ "-final.jpg"
    os.system(foo)