如何将零添加到单数变量?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (32)

如果变量小于10,尝试在varaible之前添加一个零,并创建该目录。我似乎不能正确地得到零。不断制造02.1.201102.2.2011等等

i=0
for i in {01..31}
do
    if $i > 10
        then
            mkdir $path/02.0$i.2011
        else    
            mkdir $path/02.$i.2011
    fi
done
提问于
用户回答回答于

你可以用

$(printf %02d $i)

以生成所需格式的数字。

for i in $(seq 0 1 31)
do
    mkdir $path/02.$(printf %02d $i).2011
done
用户回答回答于

你可以用:

for i in 0{1..9} {10..31} ; do
    mkdir $path/02.$i.2011
done

尽管仍然不需要启动任何外部进程(除了循环体中的进程)。

这可能没那么重要这里mkdir不是那种你经常做的事情,但是如果在bash

当执行几十万次时,流程创建是很昂贵的,就像我的一些脚本偶尔做的那样:-)

例如,可以看到它的作用:

pax$ for i in 0{7..9} {10..12}; do echo $i; done
07
08
09
10
11
12

而且,如果你有一个最近-足够的版本bash,它将满足要求:

序列表达式采用以下形式{x..y[..incr]},在哪里xy是整数或单个字符,并且incr,一个可选的增量,是一个整数。当提供整数时,表达式扩展到xy,包容。提供的整数可以以0强制每个术语具有相同的宽度。当xy以零开头,shell试图强制所有生成的术语包含相同的数字,必要时为零填充。

所以,在我的Debian 6盒子里bash4.1.5版:

pax$ for i in {07..11} ; do echo $i ; done
07
08
09
10
11

扫码关注云+社区