Psst: printf "%03d\n" 10es completamente utilizable en bash para obtener un cero a la izquierda para nombres de archivos y demás .
Squeezy
@Squeezy Gracias, pero esa parte ya estaba funcionando. El problema real no era obtener un nombre de archivo con un 0. inicial. Descubría cuál era el nombre de archivo con el número más alto y luego creaba el siguiente en la secuencia, utilizando printf "prefijo-% 03d.tif" $ SUM.
DeltaLima
8
Tenga en cuenta que podría haberlo resuelto usted mismo simplemente haciendo estoecho $((016))
Mehrdad el
2
Para su información, esto es cierto en muchos lenguajes de programación: C, C ++, Javascript.
Paul Draper
Respuestas:
128
El malentendido es que los números no significan lo que esperas.
Un cero a la izquierda denota un número con base 8. Es decir, 016es igual a 8#16. Si desea mantener el cero inicial, entonces lo necesita 10#016.
Hay 10 tipos de personas en el mundo. Aquellos que entienden binario, aquellos que no, aquellos que no esperaban una broma de base 8 y otros 5 tipos de personas.
Jon Story
42
Porque:
~$ echo $((NUM))14
si el número comienza con 0, se considera un valor octal y 16 en octal es 14 en decimal.
printf "%03d\n" 10
es completamente utilizable en bash para obtener un cero a la izquierda para nombres de archivos y demás .echo $((016))
Respuestas:
El malentendido es que los números no significan lo que esperas.
Un cero a la izquierda denota un número con base 8. Es decir,
016
es igual a8#16
. Si desea mantener el cero inicial, entonces lo necesita10#016
.fuente
Porque:
si el número comienza con 0, se considera un valor octal y 16 en octal es 14 en decimal.
fuente