Заполнение нулей в строке - PullRequest
61 голосов
/ 13 июля 2009

Я пишу bash-скрипт для получения некоторых подкастов. Проблема заключается в том, что некоторые номера подкастов состоят из одной цифры, а другие - из двух / трех цифр, поэтому мне нужно дополнить их, сделав их все 3 цифры.

Я попробовал следующее:

n=1

n = printf %03d $n

wget http://aolradio.podcast.aol.com/sn/SN-$n.mp3

но переменная 'n' не будет заполнена постоянно. Как я могу сделать его постоянным?

Ответы [ 6 ]

78 голосов
/ 13 июля 2009

Используйте обратные кавычки, чтобы назначить результат команды printf (``):

n=1
wget http://aolradio.podcast.aol.com/sn/SN-`printf %03d $n`.mp3

РЕДАКТИРОВАТЬ: Обратите внимание, что я удалил одну строку, которая не была действительно необходима. Если вы хотите назначить вывод 'printf% ...' на n, вы можете использовать

n=`printf %03d $n`

и после этого используйте подстановку переменной $ n, которую вы использовали ранее.

33 голосов
/ 13 июля 2009

Кажется, вы назначаете возвращаемое значение команды printf (которая является ее кодом выхода), вы хотите назначить вывод printf.

bash-3.2$ n=1
bash-3.2$ n=$(printf %03d $n)
bash-3.2$ echo $n
001
17 голосов
/ 16 октября 2013

Внимание, если ваша входная строка имеет начальный ноль!
printf по-прежнему будет выполнять заполнение, но также преобразует вашу строку в шестнадцатеричный восьмеричный формат.

# looks ok
$ echo `printf "%05d" 03`
00003

# but not for numbers over 8
$ echo `printf "%05d" 033`
00027

Решением этой проблемы является печать числа с плавающей точкой вместо десятичной.
Хитрость заключается в пропуске десятичных знаков с .0f.

# works with leading zero
$ echo `printf "%05.0f" 033`
00033

# as well as without
$ echo `printf "%05.0f" 33`
00033
9 голосов
/ 08 июня 2017

, чтобы избежать переключения контекста:

a="123"
b="00000${a}"
c="${b: -5}"
4 голосов
/ 13 июля 2009
n=`printf '%03d' "2"`

Интервал между нотами и спины

3 голосов
/ 13 июля 2009

Как уже упоминалось в контакте с носом, пожалуйста, подстановка команд, т. Е. $ (...), предпочтительнее, поскольку она заменяет заднюю часть, т.е. `...`.

Намного легче работать при попытке вложить несколько подстановок команд вместо экранирования, то есть "обратная косая черта", backtics.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...