填充string中的零

我正在写一个bash脚本来获得一些播客。 问题是,一些播客号码是一个数字,而另一些是两个/三个数字,因此我需要填充他们,使他们全部3位数字。

我尝试了以下内容:

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

但variables“n”不会永久填充。 我怎样才能使它永久?

使用反引号分配printf命令的结果(“):

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

编辑:请注意,我删除了一行是不是真的有必要。 如果你想把'printf%…'的输出分配给n,你可以使用

 n=`printf %03d $n` 

之后,使用之前使用的$ nvariablesreplace。

似乎你正在分配printf命令的返回值(这是它的退出代码),你想分配printf的输出。

 bash-3.2$ n=1 bash-3.2$ n=$(printf %03d $n) bash-3.2$ echo $n 001 

注意,如果你的inputstring有一个前导零!
printf仍然会执行填充,但也会将string转换为十六进制八进制格式。

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

解决scheme似乎是打印一个浮点数,而不是十进制。
诀窍是用.0f省略小数位。

 # works with leading zero $ echo `printf "%05.0f" 033` 00033 # as well as without $ echo `printf "%05.0f" 33` 00033 
 n=`printf '%03d' "2"` 

注意间距和反引号

正如noselad所提到的那样,请用命令replace,即$(…),因为它取代了倒退,也就是`...`

试图嵌套几个命令replace而不是转义,即“反向”,backtics时,更容易处理。

避免上下文切换:

 a="123" b="00000${a}" c="${b: -5}"