mkdir {0{0..9},{10..23}}
Или в Bash 4:
mkdir {00..23}
((i++))
для постепенного увеличения счетчика в while
цикл (или в другом месте). Кроме того, при использовании двойных круглых скобок, можно использовать <=
и кончить $
: i=1; while ((i<=10)); do echo $i; ((i++)); done
.
– Paused until further notice.
11 November 2009 в 21:16
Вот полностью переносимый ответ (на любую оболочку, полученную от Борна, на практически любой системе, которая может работать с такой системой), в то время как все остальные ответы, по крайней мере, немного переносимые, либо полагаются на переносимые конструкции оболочек, либо seq
, что является обычным, но ни в POSIX
, ни в универсальном варианте:
# start with a blank/clean "dirs" variable
dirs=
# iterate over the first digit
for i in 0 1 2
do
# ..and the second digit for each first digit
for j in 0 1 2 3 4 5 6 7 8 9
do
# add each digit combination to the dirs list
dirs=$dirs\ $i$j
# ..until we reach 23 - then we're done.
case $i$j in 23) break 2; esac
done
done
# finally make the directories
mkdir $dirs
Некоторые примечания:
Создание дирсов изначально гарантирует, что мы случайно не используем значение переменной окружения с именем dirs
, в случае, если мы наследуем одну из них.
На самом деле мы можем пропустить создание переменной $dirs
и просто вызвать mkdir $i$j
. Но этот способ работает лучше (запущен один mkdir процесс вместо 24) и так же портативен (если по какой-то случайности система действительно была mkdir
может принять только один аргумент каталога*, это легко адаптировать, чтобы вызвать mkdir
для каждой комбинации $i$j
вместо того, чтобы строить $dirs
переменную).
Отсутствие кавычек везде является как преднамеренным, так и правильным. Замена не обязательно должна быть заключена в кавычки внутри присваивания переменных и в первой части утверждения case
: в этих местах не происходит разбиение полей. А в строке mkdir
в конце мы полагаемся на разбиение полей, чтобы разделить список каталогов на отдельные имена/документы для mkdir
.
* "Официально" MS-DOS и Windows имеет mkdir
, который принимает только одно имя каталога, но, по крайней мере, в Windows 7 он работает с несколькими именами каталогов, плюс любой порт оболочки типа Борна на те системы, которые, как я знаю, поставляется со своим собственным mkdir
, и только такие чудаки, как я, могут даже подумать о таком уровне переносимости.