Делаем петлю только 5 раз - PullRequest
0 голосов
/ 01 января 2012

Я хочу сделать цикл (for file in *) только 5 раз (так что это уже не настоящий цикл, но, тем не менее), есть ли способ сделать это?

Ответы [ 4 ]

5 голосов
/ 01 января 2012

Поместите файлы в массив, затем нарежьте массив.

$ files=(*)
$ for file in "${files[@]::5}" ; do echo "$file" ; done
あいうえお
0000000000-11-005978.txt
0000000000-11-020832.txt
1
,123
1 голос
/ 01 января 2012

Предполагая, что переменная i не определена или равна 0, когда вы входите в цикл и не используются в цикле, просто добавьте строку:

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

в теле цикла.Цикл разорвется во время 5-й итерации, поэтому, если вы поместите строку в конец тела цикла, ваши команды будут выполняться 5 раз.Если ваша оболочка поддерживает это, вы также можете использовать менее переносимый

((++i >= 5)) && break
1 голос
/ 01 января 2012

Это будет смотреть только на первые пять элементов в каталоге:

for file in $(ls | head -5)

Как указывает Игнасио Васкес-Абрамс, это работает, только если ваши имена файлов не содержат пробелов. (Они, вероятно, не будут, но что-то иметь в виду.)

0 голосов
/ 01 января 2012

Вот еще одно решение, в котором используется только bash, а не внешние инструменты:

let COUNT=0
for FILENAME in *
do
    echo do something to $FILENAME
    let COUNT=COUNT+1
    if (( $COUNT == "5" )); then
        break
    fi
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...