2017-01-06 20 views
0

Я форматирование чисел в Баш скрипт с PrintfКак заставить десятичную интерпретацию параметра PRINTF в Bash вместо восьмеричной

printf "%04d" $input # four digits width with leading zeros if shorter 

Если input="011" Printf принимает значение восьмеричный и возвращает 0009 вместо 0011.

Можно ли заставить printf принимать все значения десятичными?

+2

Почему бы просто не удалить ведущие нули при назначении 'input'? – Barmar

+0

В этом случае я должен проверить любой ввод, если он начинается с нуля. Я думаю, что ответ от chepner/jackman более краток. – lojoe

+0

Вы все равно должны проверить свои данные, не так ли? вы не просто используете пользовательский ввод, не проверяя ничего, правильно? поэтому почему бы не использовать регулярное выражение, например 'if [[$ input = ~^0 * ([[: digit:]] *) $]]; затем input = $ {BASH_REMATCH [1]}; printf '% 04d \ n' "$ input"; else echo 'bad input'; fi'. –

ответ

2

Префикс значения с помощью базового спецификатора 10#.

$ printf "%04d\n" "$input" 
0009 
$ printf "%04d\n" "$((10#$input))" 
0011 
+1

Нужно использовать арифметическую оценку –

+0

Thanks; Я упустил сообщение об ошибке, которое я получил, и 'printf' выдает вывод для' 10' (после сброса '# 011') в любом случае. – chepner