Algunos shells, como el predeterminado de Ubuntu /bin/sh
(que es dash
) o mksh
no tienen expansión de llaves, o en el caso de ksh
- la expansión de llaves no puede usar ceros rellenos:
$ ksh -c 'echo {05..13}'
5 6 7 8 9 10 11 12 13
En tales casos, podemos usar printf
para formatear la parte del número del nombre de archivo y usar un bucle while para implementar el comportamiento de bucle c-like (nota para reemplazar echo
con rm
o lo que quieras):
$ 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
Y esto es bastante portátil - trabaja con dash
, ksh
, mksh
, también bash
. En el caso de ksh
y bash
también podemos usar 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
Tenga en cuenta que, en bash
el caso, printf
admite la impresión en variable y, por lo tanto, podríamos hacerlo en printf -v num "%.2d" "$i"
lugar de utilizar la sustitución de comandos.