Puede utilizar el bash incorporado printf
con la opción -v
para escribirlo en una variable en lugar de imprimir en la salida estándar:
pax> inputNo=5 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
05
pax> inputNo=102 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
102
Primero querrá asegurarse de que sea numérica, de lo contrario la conversión fallará. Si usted quiere ser capaz de almohadilla cualquier cadena a dos o más caracteres, también se puede utilizar:
while [[ ${#inputNo} -lt 2 ]] ; do
inputNo="0${inputNo}"
done
que es básicamente un bucle while
que prefija la cadena con "0" hasta que la longitud es mayor que o igual a dos.
Tenga en cuenta que esto también puede hacerse en bash
anteponiendo el número con dos ceros a continuación, simplemente conseguir los dos últimos caracteres de esa cadena, comprobar primero que no está ya al menos el tamaño deseado:
if [[ ${#inputNo} -lt 2 ]] ; then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
La diferencia probablemente no sea demasiado grande para un número de dos dígitos, pero puede encontrar que la última solución es mejor si necesita anchos más grandes.
Si estás usando una concha otra de bash
(poco probable, basado en sus etiquetas), tendrá que encontrar los equivalentes, o volver a usar procesos externos para hacer el trabajo, algo así como :
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
Esto hace básicamente lo que estabas pensando fuera de su pregunta, pero tenga en cuenta el uso de -n
en el comando echo
para evitar el salto de línea final (que fue casi con certeza la causa de su off-by-one error).
Pero, como se dijo, esta es una posición de retroceso. Si está usando bash
, las primeras sugerencias mías son probablemente las mejores.
¡Gracias! Funciona genial. – Mint
No hay necesidad de procesos externos en el caso general: 'while test" $ {# inputNo} "-lt 2; hacer inputNo = "0 $ inputNo"; done' (* [[* cambió a * prueba * con un presupuesto añadido para que sea compatible con más shells). –
No hay necesidad de extensiones bash ($ {# ...}) tampoco: 'case $ inputNo en [0-9]) inputNo =" 0 $ inputNo ";;) ;; esac'. – Idelic