Вы можете заменить весь лот:
for i in 0{1..9} {10..31} ; do
mkdir $path/02.$i.2011
done
без необходимости запуска каких-либо внешних процессов (кроме тех, которые могут быть в теле цикла).
Это, вероятно, не так важно здесь , поскольку mkdir
- это не та вещь, которую вы часто делаете в тесном цикле, но будет важной, если вы напишите много вашего быстрого и грязного кода в bash
.
Создание процесса стоит дорого, когда вы делаете это сотни тысяч раз, как иногда делали некоторые из моих сценариев: -)
Пример, чтобы вы могли увидеть его в действии:
pax$ for i in 0{7..9} {10..12}; do echo $i; done
07
08
09
10
11
12
И, если у вас достаточно недавняя версия bash
, она выполнит ваш запрос на ввод начальных цифр:
Выражение последовательности принимает форму {x..y[..incr]}
, где x
и y
являются целыми числами или одиночными символами, а incr
, необязательное приращение, является целым числом. Если заданы целые числа, выражение расширяется до каждого числа от x
до y
включительно. Поставляемые целые числа могут иметь префикс 0
, чтобы каждый член имел одинаковую ширину. Когда x
или y
начинается с нуля, оболочка пытается заставить все сгенерированные термины содержать одинаковое количество цифр, при необходимости дополняя нулями.
Итак, на моем Debian 6 box с bash
версия 4.1.5:
pax$ for i in {07..11} ; do echo $i ; done
07
08
09
10
11