填充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}"