尝试在可变量之前添加零,如果小于10并创建所述目录。我似乎无法使零正确添加。导致制造02.1.2011,02.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
您可以用以下替换整个批次:
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版本,那么它将会满足您的主要数位要求:
A sequence expression takes the form
{x..y[..incr]}
,wherex
andy
are either integers or single characters,andincr
,an optional increment,is an integer. When integers are supplied,the expression expands to each number betweenx
andy
,inclusive. Supplied integers may be prefixed with0
to force each term to have the same width. When eitherx
ory
begins with a zero,the shell attempts to force all generated terms to contain the same number of digits,zero-padding where necessary.
所以,在我的Debian 6框中,使用bash版本4.1.5:
pax$ for i in {07..11} ; do echo $i ; done 07 08 09 10 11