Как я пишу для цикла в ударе

Я ищу основной цикл как:

for(int i = 0; i < MAX; i++) {
  doSomething(i);
}

но для удара.

86
задан codeforester 15 July 2019 в 18:49
поделиться

7 ответов

От этот сайт :

for i in $(seq 1 10);
do
    echo $i
done
97
ответ дан stkent 24 November 2019 в 07:57
поделиться
for ((i = 0 ; i < max ; i++ )); do echo "$i"; done
60
ответ дан Chris Down 24 November 2019 в 07:57
поделиться

Удар for состоит на переменной (итератор) и список слов, где итератор, ну, в общем, выполнит итерации.

Так, если у Вас есть ограниченный список слов, просто помещают их в следующий синтаксис:

for w in word1 word2 word3
do
  doSomething($w)
done

, Вероятно, Вы хотите выполнить итерации вдоль некоторых чисел, таким образом, можно использовать эти seq команда для генерации списка чисел для Вас: (от 1 до 100, например)

seq 1 100

и использование это в ДЛЯ цикла:

for n in $(seq 1 100)
do
  doSomething($n)
done

Примечание $(...) синтаксис. Это - поведение удара, это позволяет Вам передавать вывод от одной команды (в нашем случае от seq) другому (for)

, Это действительно полезно, когда необходимо выполнить итерации по всем каталогам в некотором пути, например:

for d in $(find $somepath -type d)
do
  doSomething($d)
done

возможности бесконечны для генерации списков.

33
ответ дан Fernando Barrocal 24 November 2019 в 07:57
поделиться

Мне обычно нравится использовать небольшой вариант по стандарту для цикла. Я часто использую это для выполнения команды на серии удаленных хостов. Я использую в своих интересах расширение фигурной скобки удара для создания для циклов, которые позволяют мне создавать нечисловой для циклов.

Пример:

я хочу работать, команда времени работы на frontend размещает 1-5, и бэкенд размещает 1-3:

% for host in {frontend{1..5},backend{1..3}}.mycompany.com
    do ssh $host "echo -n $host; uptime"
  done

я обычно выполняю это как однострочную команду с точками с запятой на концах строк вместо более читаемой версии выше. Ключевая рекомендация по использованию - то, что фигурные скобки позволяют Вам определять несколько значений, которые будут вставлены в строку (например, пред {нечто, панель} результаты сообщения в prefoopost, prebarpost) и позволят считать/упорядочивать при помощи двойных периодов (можно использовать a.. z и т.д.). Однако двойной синтаксис периода является новой возможностью удара 3.0; более ранние версии не будут поддерживать это.

4
ответ дан terson 24 November 2019 в 07:57
поделиться

Попробуйте bash встроенная справка:


$ help for

for: for NAME [in WORDS ... ;] do COMMANDS; done
    The `for' loop executes a sequence of commands for each member in a
    list of items.  If `in WORDS ...;' is not present, then `in "$@"' is
    assumed.  For each element in WORDS, NAME is set to that element, and
    the COMMANDS are executed.
for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done
    Equivalent to
        (( EXP1 ))
        while (( EXP2 )); do
            COMMANDS
            (( EXP3 ))
        done
    EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is
    omitted, it behaves as if it evaluates to 1.


14
ответ дан Pat Notz 24 November 2019 в 07:57
поделиться

если Вы межупрощены только в ударе "для ((...))" решения, представленного выше, является лучшим, но если Вы хотите что-то POSIX SH, совместимый, который будет работать над всеми нельдами, необходимо будет использовать "expr" и "в то время как", и поэтому" (())" или "seq" или "i=i+1" не то, что портативен среди различных оболочек

1
ответ дан 24 November 2019 в 07:57
поделиться

Я использую изменения этого все время для обработки файлов...

для файлов в *.log; действительно отзовитесь эхом, "Действительно наполняют: $files"; эхо "Действительно больше наполняет: $files";договорились;

, Если обработка списков файлов - то, чем Вы интересуетесь, изучите опция-execdir для файлы .

0
ответ дан 24 November 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: