2013-10-17 70 views
0

我有一個包含許多子目錄(名爲0001,0002 ...)的目錄,並且我想要啓動在每個目錄中運行的bash腳本。如何在for循環範圍內保持前導零

for i in {0001..0021}; do cd $i; ../script1.sh; cd ..; done 

以上它忽略了000並將範圍設置爲1到21.我怎樣才能讓它考慮到0?

+0

慶典版'4.2.45(2)''{0001 ..0021}'只是給你想要的。 – Kent

+0

@Kent:Bash version'4.2.45(2)'here,'echo {0001..0021}'''1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21'不是OP想要的。 – nneonneo

+0

@nneonneo奇怪....我沒有說謊......:D檢查此:https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html搜索'提供的整數'並閱讀。 – Kent

回答

3
for i in {1..21}; do 
    i=`printf '%04d' $i` 
    # do stuff with $i (now in the format 0001) 
done 
+0

或'i = $(printf'%04d'$ i)' –

0

您可以在BASH使用((...))

for ((i=0; i<=21; i++)); do j=$(printf "%04d" $i); cd $j; ../script1.sh; cd ..; done 
2

我想開始在每個目錄運行bash腳本。

然後,你可以簡單地使用*

for i in *; do cd $i; ../script1.sh; cd ..; done 
0

尚未這樣做的另一種方式(我的方式和最快)

for i in 000{1..21}; do cd ${i:(-4)}; ../script1.sh; cd ..; done