Некоторые оболочки, такие как Ubuntu по умолчанию /bin/sh
(то есть dash
) или mksh
не имеют расширения скобок, или в случае ksh
расширения скобок не могут использовать дополненные нули:
$ ksh -c 'echo {05..13}'
5 6 7 8 9 10 11 12 13
В таких случаях мы можем использовать printf
для форматирования числовой части имени файла и использовать цикл while для реализации c-like для поведения цикла (обратите внимание, чтобы заменить echo
на rm
или как хотите):
$ i=5; while [ "$i" -le 10 ]; do num=$(printf "%.2d" "$i" ); echo "file$num.txt";i=$(($i+1)); done
file05.txt
file06.txt
file07.txt
file08.txt
file09.txt
file10.txt
И это достаточно портативный - работает с dash
, ksh
, mksh
, и bash
. В случае ksh
и bash
мы также можем использовать c-style for loop syntax (but not in case of
mksh or
dash`):
$ ksh -c 'for((i=5;i<11;i++)); do num=$(printf "%.2d" "$i" ); echo "file$num.txt";done'
file05.txt
file06.txt
file07.txt
file08.txt
file09.txt
file10.txt
Обратите внимание, что в этом bash
случае printf
поддерживается печать в переменную, и, следовательно, мы могли бы сделать printf -v num "%.2d" "$i"
вместо использования подстановки команд.