Штрих для циклу з діапазоном {# .. #}


17

{# .. #} генерують послідовність чисел або знаків, аналогічно діапазону () в Python. Якщо я виконую команду echo {1..5}в командному рядку, у мене є:

1 2 3 4 5

Натомість наступний скрипт bash працює не так, як очікувалося.

for i in {1..3};
do
    echo "Iteration $i"
done

надрукує:

Iteration {1..3}

Чому?
* Я можу використовувати, seqале я прочитав його застарілий ( http://www.cyberciti.biz/faq/bash-for-loop/ )


Ця помилка виникає, якщо сценарій виконується командою "sh" (спробуйте використовувати "bash").
Shake0

Відповіді:


22

Я спробував ваш код (скопіюйте пасту в термінал), і він дав результат, відмінний від того, який ви розмістили:

for i in {1..3};
do
    echo "Iteration $i"
done
#---OUTPUT BELOW---
Iteration 1
Iteration 2
Iteration 3

Я використовую Linux Mint 12 Lisa (походить від Ubuntu) з версією bash 4.2.10 (1)


2
Ти правий! Я думав, що sh та bash - це одне й те саме ..
Shake0

1
ні, bash і sh є зовсім різними ... bash є більш здатним, ніж sh, він був зроблений на плечах sh :), хоча вони обоє мають хороший ступінь сумісності, вони також мають свої відмінності
zipizap

зауважте, що ви можете робити вкладені списки, наприклад, для var у {{i..j}, {l..m}}; виконайте echo $ var; зроблено, якщо вам потрібна неправильна послідовність, наприклад 1 2 3 7 8 9
коричневий.2179

Зауважте, що в деяких дистрибутивах /bin/shIS насправді вказує на bash, на Debian і Ubuntu, як правило, вказують на /bin/dashце, в основному, сумісні з POSIX, але не підтримують той же синтаксис, що і Bash.
dragon788
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.