В цикле zsh для генерации строки с нулевым начальным числом
У меня много частично-00001, частично-00002, ... файлов.
Я хочу использовать этот способ:
for ((i=0;i<1000;i++)); do <some command> <formatted string with i>; done.
Как я могу отформатировать строку типа part-000xx с номером i в zsh?
1 ответ
Это можно сделать с помощью:
typeset -Z 5 i
(используя встроенныйtypeset -Z [N]
)printf "part-%05d" $i
(используя встроенныйprintf "%05d" $i
)${(l:5::0:)i}
(используя флаги расширения параметровl:expr::string1:string2:
)
как ниже:
typeset -Z 5 j
for ((i=0;i<1000;i++)); do
# <some command> <formatted string with i>
j=$i; echo "part-$j" # use $j here for sure the effects of below 2 lines
echo "$(printf "part-%05d" $i)"
echo "part-${(l:5::0:)j}"
done
# This outputs below:
# >> part-00000
# >> part-00000
# >> part-00000
# >> part-00001
# >> part-00001
# >> part-00001
# >> ...
# >> part-00999
Вот описание для каждого элемента.
typeset
-Z
[N]
Специально обрабатывается, если установлен вместе с флагом -L. В противном случае, аналогично -R, за исключением того, что начальные нули используются для заполнения вместо пробелов, если первый непустой символ является цифрой. Числовые параметры обрабатываются специально: они всегда могут заполняться нулями, а нули вставляются в соответствующем месте на выходе.
-zshbuiltins(1)
,typeset
Команды Shell Builtin
printf
Распечатайте аргументы в соответствии со спецификацией формата. Правила форматирования такие же, как в C.
-zshubuiltins(1)
,printf
Команды Shell Builtin
l
: выраж::string1::string2:
Дополните полученные слова слева. Каждое слово будет обрезано при необходимости и помещено в поле шириной expr символов.
Аргументы : string1: и : string2: являются необязательными; ни первый, ни оба не могут быть даны. Обратите внимание, что для каждого из трех аргументов должны использоваться одинаковые пары разделителей. Пробел слева будет заполнен строкой1 (объединенной так часто, как это необходимо) или пробелами, если строка1 не задана. Если заданы как string1, так и string2, строка2 вставляется один раз непосредственно слева от каждого слова, при необходимости обрезается перед тем, как строка1 используется для создания любого оставшегося заполнения.
-zshexpn(1)
Флаги расширения параметров