Деякі оболонки, наприклад, за замовчуванням Ubuntu /bin/sh
(який є dash
), або mksh
не мають розширення дужок, або у випадку ksh
- розширення дужки не може використовувати забиті нулі:
$ ksh -c 'echo {05..13}'
5 6 7 8 9 10 11 12 13
У таких випадках ми можемо скористатися printf
форматуванням числової частини імені файлу та циклом часу, щоб реалізувати 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"
замість використання підстановки команд.