您可以用以下内容替换整个批次:
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]}
,其中x
和y
是整数或单个字符,incr
可选的增量是整数.提供整数时,表达式将扩展为介于x
和之间的每个数字y
.提供的整数可以加上前缀,0
以强制每个术语具有相同的宽度.当任何一个x
或y
以零开始时,shell会尝试强制所有生成的术语包含相同数量的数字,必要时填充零.
所以,在我的Debian 6盒子上,bash
版本4.1.5:
pax$ for i in {07..11} ; do echo $i ; done 07 08 09 10 11
您可以使用
$(printf %02d $i)
用您想要的格式生成数字.
for i in $(seq 0 1 31) do mkdir $path/02.$(printf %02d $i).2011 done
更好:
for i in $(seq -f %02g 1 31) do mkdir "$path/02.$i.2011" done
甚至:
for i in {01..31} do mkdir "$path/02.$(printf "%02d" $i).2011" done