2011-12-31 107 views
0

我想做一個循環(for file in *)只有5次(所以它不是一個真正的循環了,但是)但是有無論如何做到這一點?做一個循環只有5次

+2

以何種方式不限制環路5迭代使其「不是真正的循環」? – 2011-12-31 22:58:49

+0

還有'seq'命令。 – fge 2012-01-01 12:50:21

回答

5

將文件放在數組中,然後對數組進行切片。

$ files=(*) 
$ for file in "${files[@]::5}" ; do echo "$file" ; done 
あいうえお 
0000000000-11-005978.txt 
0000000000-11-020832.txt 
1 
,123 
1

這隻會看看目錄的第一個五個品:如果

for file in $(ls | head -5) 

正如伊格納西奧巴斯克斯 - 艾布拉姆斯點出,這僅適用於您的文件名不包含任何空格。 (他們可能不會,但事情要記住。)

+1

除非其中一個在文件名中有空格。 – 2011-12-31 22:45:29

+0

@ IgnacioVazquez-Abrams嗯,這是非常罕見的,雖然你是正確的。 – chrisaycock 2011-12-31 22:53:05

+1

@chrisaycock:文件名中的空白不是非常罕見。 '用於$(ls -1 | head -5)中的文件「;做回聲「$文件」;完成'做它應該做的事情。 – Dennis 2011-12-31 23:05:51

1

假設變量i未定義或0,當你進入循環,在循環中不使用,只需添加一行:

 
test $((++i)) -ge 5 && break 

在循環體中。循環將在第5次迭代期間爆發,因此如果將該行放在循環體的末尾,那麼您的命令將執行5次。如果你的外殼支持的話,你也可以使用更少的便攜式

 
((++i >= 5)) && break 
0

這裏是另一種解決方案,只使用bash和沒有外部工具:

let COUNT=0 
for FILENAME in * 
do 
    echo do something to $FILENAME 
    let COUNT=COUNT+1 
    if (($COUNT == "5")); then 
     break 
    fi 
done