Как я проверяю международную переменную ($inputNo), чтобы видеть, являются ли это 2 или больше десятичных цифры долго?
Пример:
inputNo="5"
Должен быть изменен на: 05
inputNo="102"
Должен быть оставлен в покое: 102
Я думал об использовании wc
и if
операторы, но wc -m
не делает, кажется, дает фактические символы, переданные в wc
, как wc
всегда, кажется, дает +1 символам, который дан.
Но я не знаю, как добавить 0 перед текущим входным числом.
Вы можете использовать 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
, мои предыдущие предложения, вероятно, будут лучшими.
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
, мои предыдущие предложения, вероятно, будут лучшими.
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
, мои предыдущие предложения, вероятно, будут лучшими.
if [[ ${#inputNo} -lt 2 ]] ; then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
Разница, вероятно, не слишком велика для двузначного числа, но вы можете найти последнее решение лучше, если вам нужна большая ширина.
Если вы используете оболочку other , чем bash
(маловероятно, исходя из ваших тегов), вам нужно будет найти эквиваленты или вернуться к использованию внешних процессов для выполнения работы, например:
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
Это в основном то, о чем вы думали. на ваш вопрос, но обратите внимание на использование -n
в команде echo
, чтобы предотвратить завершающуюся новую строку (что почти наверняка вызывало вашу постепенную ошибку).
Но, как уже говорилось, это резервная позиция. Если вы используете bash
, мои предыдущие предложения, вероятно, будут лучшими.
if [[ ${#inputNo} -lt 2 ]] ; then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
Разница, вероятно, не слишком велика для двузначного числа, но вы можете найти последнее решение лучше, если вам нужна большая ширина.
Если вы используете оболочку other , чем bash
(маловероятно, исходя из ваших тегов), вам нужно будет найти эквиваленты или вернуться к использованию внешних процессов для выполнения работы, например:
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
Это в основном то, о чем вы думали. на ваш вопрос, но обратите внимание на использование -n
в команде echo
, чтобы предотвратить завершающуюся новую строку (что почти наверняка вызывало вашу постепенную ошибку).
Но, как уже говорилось, это резервная позиция. Если вы используете bash
, мои предыдущие предложения, вероятно, будут лучшими.
bash
(маловероятно, исходя из ваших тегов), вам нужно будет найти эквиваленты или вернуться к использованию внешних процессов для выполнения работы, например :
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
Это в основном то, о чем вы думали в своем вопросе, но обратите внимание на использование -n
в команде echo
, чтобы предотвратить завершающуюся новую строку (что почти наверняка вызывало у вас единичная ошибка).
Но, как было сказано, это запасной вариант. Если вы используете bash
, мои предыдущие предложения, вероятно, будут лучшими.
bash
(маловероятно, исходя из ваших тегов), вам нужно будет найти эквиваленты или вернуться к использованию внешних процессов для выполнения работы, например :
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
Это в основном то, о чем вы думали в своем вопросе, но обратите внимание на использование -n
в команде echo
, чтобы предотвратить завершающуюся новую строку (что почти наверняка вызывало у вас (одна ошибка один за другим).
Но, как уже говорилось, это резервная позиция. Если вы используете bash
, мои предыдущие предложения, вероятно, будут лучшими.
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
Это в основном то, о чем вы думали в своем вопросе, но обратите внимание на использование -n
в команде echo
, чтобы предотвратить завершающуюся новую строку (что почти наверняка вызывало отключение по одной ошибке).
Но, как было сказано, это резервная позиция. Если вы используете bash
, мои предыдущие предложения, вероятно, будут лучшими.
while [[ $(echo -n ${inputNo} | wc -c) -lt 2 ]] ; do
inputNo="0${inputNo}"
done
Это в основном то, о чем вы думали в своем вопросе, но обратите внимание на использование -n
в команде echo
для предотвращения завершения новой строки (что почти наверняка вызывало отключение по одной ошибке).
Но, как было сказано, это резервная позиция. Если вы используете bash
, мои предыдущие предложения, вероятно, будут лучшими.
Для заполнения общего назначения, независимо от того, является ли строка числовой или нет
Нет необходимости передавать эхо
в wc
или использовать while
loop.
В Bash вы можете получить длину строки следующим образом: $ {# inputNo}
.
И поскольку вы можете использовать подстроки, вы можете сделать это вместо :
if [[ ${#input} < 2 ]]
then
inputNo="00${inputNo}"
inputNo="${inputNo: -2}"
fi
Вы можете использовать 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})"