62 bash
我正在编写一个bash脚本来获取一些播客.问题是一些播客号码是一位数,而其他播客号码是两位/三位数,因此我需要填充它们以使它们全部为3位数.
我尝试了以下方法:
n=1
n = printf %03d $n
wget http://aolradio.podcast.aol.com/sn/SN-$n.mp3
Run Code Online (Sandbox Code Playgroud)
但变量'n'不会永久保留填充.我怎样才能永久化?
Chr*_*heD 81
使用反引号来分配printf命令的结果(``):
n=1
wget http://aolradio.podcast.aol.com/sn/SN-`printf %03d $n`.mp3
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,我删除了一行,这是不必要的.如果要将'printf%...'的输出分配给n,可以使用
n=`printf %03d $n`
Run Code Online (Sandbox Code Playgroud)
然后,使用之前使用的$ n变量替换.
nos*_*nos 35
看起来你要分配printf命令的返回值(这是它的退出代码),你想要分配printf的输出.
bash-3.2$ n=1
bash-3.2$ n=$(printf %03d $n)
bash-3.2$ echo $n
001
Run Code Online (Sandbox Code Playgroud)
UnS*_*per 17
如果您的输入字符串具有前导零,请注意!
printf仍将执行填充,但也将您的字符串转换为十六进制八进制格式.
# looks ok
$ echo `printf "%05d" 03`
00003
# but not for numbers over 8
$ echo `printf "%05d" 033`
00027
Run Code Online (Sandbox Code Playgroud)
对此的解决方案似乎是打印浮点数而不是小数.
诀窍是省略小数位.0f.
# works with leading zero
$ echo `printf "%05.0f" 033`
00033
# as well as without
$ echo `printf "%05.0f" 33`
00033
Run Code Online (Sandbox Code Playgroud)