È possibile utilizzare la bash-incorporato printf
con l'opzione -v
di scrivere ad una variabile piuttosto che stamparlo su standard output:
pax> inputNo=5 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
05
pax> inputNo=102 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
102
Dovrai assicurarti che sia numerico prima altrimenti la conversione fallirà. Se si vuole essere in grado di pad qualsiasi stringa fuori per due o più caratteri, è anche possibile utilizzare:
while [[ ${#inputNo} -lt 2 ]] ; do
inputNo="0${inputNo}"
done
che è fondamentalmente un ciclo while
, che viene anteposta la stringa con "0" fino a quando la lunghezza è maggiore uguale o uguale a due.
Si noti che questo può essere fatto anche in bash
anteponendo il numero con due zeri poi semplicemente ottenere gli ultimi due caratteri della stringa, controllando prima che non è già, almeno le dimensioni desiderate:
if [[ ${#inputNo} -lt 2 ]] ; then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
La differenza probabilmente non è troppo grande per un numero a due cifre, ma potresti trovare che quest'ultima soluzione è migliore se hai bisogno di larghezze maggiori.
Se stai usando una shell altro di bash
(improbabile, in base alle tag), avrete bisogno di trovare gli equivalenti, o tornare a utilizzare processi esterni per fare il lavoro, qualcosa di simile :
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
Questo fa sostanzialmente quello che stavi pensando fuori nella tua domanda, ma noti l'uso del -n
nel comando echo
per evitare che il newline finale (che è stato quasi certamente causando il vostro off-by-one errore).
Ma, come detto, questa è una posizione di ripiego. Se stai utilizzando bash
, i miei suggerimenti precedenti sono probabilmente i migliori.
Grazie! Funziona alla grande. – Mint
Nessun bisogno di processi esterni nel caso generale: 'while test" $ {# inputNo} "-lt 2; do inputNo = "0 $ inputNo"; done' (* [[* modificato in * test * con aggiunta di quoting per renderlo compatibile con più shell). –
Nessun bisogno di estensioni bash ($ {# ...}): 'caso $ inputNo in [0-9]) inputNo =" 0 $ inputNo ";; *) ;; esac'. – Idelic