Заполняющие нули в строке
Я пишу bash script, чтобы получить некоторые подкасты. Проблема в том, что некоторые номера подкастов являются одними цифрами, а другие - двумя/тремя цифрами, поэтому мне нужно проложить их, чтобы сделать их все 3 цифры.
Я попробовал следующее:
n=1
n = printf %03d $n
wget http://aolradio.podcast.aol.com/sn/SN-$n.mp3
но переменная 'n' не остается постоянной. Как я могу сделать это постоянным?
Ответы
Ответ 1
Используйте обратные ссылки для назначения результата команды printf (``):
n=1
wget http://aolradio.podcast.aol.com/sn/SN-`printf %03d $n`.mp3
EDIT: Обратите внимание, что я удалил одну строку, которая не была действительно необходимой.
Если вы хотите присвоить вывод "printf%..." на n, вы можете
используйте
n=`printf %03d $n`
и после этого используйте замену переменной $n, которую вы использовали раньше.
Ответ 2
Кажется, вы назначаете возвращаемое значение команды printf (это его код выхода), вы хотите назначить вывод printf.
bash-3.2$ n=1
bash-3.2$ n=$(printf %03d $n)
bash-3.2$ echo $n
001
Ответ 3
Внимание, хотя ваша строка ввода имеет нулевой знак!
printf по-прежнему будет выполнять добавление, но также преобразует вашу строку в восьмеричный .
# looks ok
$ echo `printf "%05d" 03`
00003
# but not for numbers over 8
$ echo `printf "%05d" 033`
00027
Решение этой задачи, похоже, печатает float вместо десятичного.
Трюк пропускает десятичные знаки с помощью .0f
.
# works with leading zero
$ echo `printf "%05.0f" 033`
00033
# as well as without
$ echo `printf "%05.0f" 33`
00033
Ответ 4
n=`printf '%03d' "2"`
Расстояние между метками и обратными окнами
Ответ 5
Как упоминается noselad, пожалуйста, подстановочная команда, т.е. $(...), предпочтительнее, поскольку она отменяет backtics, т.е. `...`
.
Намного легче работать, когда вы пытаетесь вложить несколько подстановок команд вместо экранирования, т.е. "обратный слэш", backtics.
Ответ 6
чтобы избежать переключения контекста:
a="123"
b="00000${a}"
c="${b: -5}"