2015-02-03 4 views
1

Я обсуждаю использование seq для небольшого цикла в сценарии Bash (например, цикл с 10 итерациями). я говорю, к примеру, лучше сделать этотИзбегайте команды seq в Bash?

for i in {1..10} 
do 
    echo "Welcome $i times" 
done 

чем использование НомерСтарта

for i in $(seq 10) 
do 
    echo "Welcome $i times" 
done 

, как написано здесь: http://www.cyberciti.biz/faq/bash-for-loop/

На мой взгляд, не имеет смысла для короткого цикла использовать не встроенная команда. Как насчет производительности, например?

ответ

3

seq подходит, если вы не знаете диапазон, который вы собираетесь выполнить: вы можете сказать seq $a $b, тогда как вы не можете сказать {$a..$b}.

Кроме того, {} доступен только для Bash, так что, например, в Shell вы не сможете его использовать.

Это означает, что если вы нацеливаете bash, то использование {1..10}, безусловно, будет быстрее (и дешевле), чем с использованием seq, и это может иметь значение. seq - это внешняя команда, которая делает выполнение медленнее.

От man bash:

Brace Расширение расширения Brace

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

...

расширения Brace вносит небольшую несовместимость с историческими версиями ш. sh не обрабатывает открывающие или закрывающие фигурные скобки специально , когда они появляются как часть слова и сохраняют их на выходе. Bash удаляет фигурные скобки из слов как следствие расширения скобки. Например, слово, введенное в sh как файл {1,2}, отображается тождественно в выход. То же самое слово выводится как file1 file2 после расширения by bash. Если требуется строгая совместимость с sh, запустите bash с опцией + B или отключите расширение брекета с помощью опции + B в команде .

+0

Если вы настроили таргетинг на bash, то использование '{1..10}', безусловно, будет быстрее (и дешевле), чем использование 'seq', и это может иметь значение. –

+0

Вы прибили его, @EtanReisner, я просто добавил ваш комментарий к ответу :) – fedorqui

+0

Так лучше делать 'for ((n = 1; n <= 10; n ++))'? И поэтому проблема может быть с большим циклом, а не коротким? – Kyrol

 Смежные вопросы

  • Нет связанных вопросов^_^