Удостоверьтесь, что переменная int имеет длину 2 цифры, иначе добавьте 0 впереди, чтобы сделать ее длиной 2 цифры

Как проверить переменную int ($ inputNo), чтобы увидеть, долго ли ее две или более десятичных цифр?

Пример:

inputNo="5"

Должно быть изменено на: 05

inputNo="102"

Следует оставить в покое: 102

Я думал об использовании операторов wc и if, но wc -m, кажется, не дает фактических символов, переданных в wc, так как wc всегда дает +1 символам, которые даны.

Но я не знаю, как добавить 0 перед текущим номером ввода.

Ответы

Ответ 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, более ранние мои рекомендации, вероятно, лучше всего.

Ответ 2

Для общего назначения, является ли строка числовой или нет

Нет необходимости в трубопроводе echo в wc или с помощью цикла while.

В Bash вы можете получить длину строки следующим образом: ${#inputNo}.

И поскольку вы можете делать подстроки, вы можете сделать это вместо:

if [[ ${#input} < 2 ]] 
then
    inputNo="00${inputNo}"
    inputNo="${inputNo: -2}"
fi

Ответ 3

Вы можете использовать http://bash-hackers.org/wiki/doku.php/commands/builtin/printf, пример оттуда:

the_mac="0:13:ce:7:7a:ad"

# lowercase hex digits
the_mac="$(printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${the_mac//:/ 0x})"

# or the uppercase-digits variant
the_mac="$(printf "%02X:%02X:%02X:%02X:%02X:%02X" 0x${the_mac//:/ 0x})"