#shell #zsh
#оболочка #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
использованием number $(0..20000.1000)
.
Есть ли в оболочке другой способ сделать это?
Ответ №1:
Не должно быть $
before {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
Ответ №2:
#!/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)
Комментарии:
1. Python выполнил эту работу за меня.
2. Я знаю, что вы были OP, но вы попросили решение оболочки, поэтому ответ с помощью Python не поможет следующему парню.