Ответ 1
Вы можете использовать bash -builtin printf
с опцией -v
, чтобы записать его в переменную, а не печатать ее на стандартный вывод:
pax> inputNo=5 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
05
pax> inputNo=102 ; printf -v inputNo "%02d" $inputNo ; echo $inputNo
102
Сначала вы хотите убедиться, что это числовое число, иначе конверсия завершится неудачно. Если вы хотите, чтобы вы могли накладывать любую строку на два или более символа, вы также можете использовать:
while [[ ${#inputNo} -lt 2 ]] ; do
inputNo="0${inputNo}"
done
который в основном представляет собой цикл while
, который префикс вашей строки с "0", пока длина больше или равна двум.
Обратите внимание, что это также можно сделать в bash
путем префикса числа с двумя нулями, а затем просто получить последние два символа этой строки, сначала проверив, что он уже не имеет желаемого размера:
if [[ ${#inputNo} -lt 2 ]] ; then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
Разница, вероятно, не слишком велика для двузначного числа, но вы можете найти последнее решение лучше, если вам нужна большая ширина.
Если вы используете оболочку, отличную от bash
(маловероятно, на основе ваших тегов), вам нужно будет найти эквиваленты или вернуться к использованию внешних процессов для выполнения работы, например:
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
Это в основном то, о чем вы думали в своем вопросе, но обратите внимание на использование -n
в команде echo
, чтобы предотвратить завершающую новую строку (что почти наверняка вызывало вашу ошибку "один за другим" ).
Но, как было сказано, это позиция падения. Если вы используете bash
, более ранние мои рекомендации, вероятно, лучше всего.