Выражение последовательности в bash - PullRequest
1 голос
/ 18 декабря 2009

Я привык использовать следующую функцию bash:

for i in ${1..23} ; do echo $i ; done

Это не обобщает. Например, замена 23 на $p не работает. Как сказано в документации, это чисто синтаксическая особенность.

Чем бы вы заменили это?

Примечание : Конечно, это можно сделать с помощью while и вспомогательной переменной, но это не то, что я ищу, даже если это работает. На самом деле я возвращаюсь к этому.

Ответы [ 4 ]

3 голосов
/ 18 декабря 2009

Вы можете использовать инструмент seq для достижения эффекта, я не знаю, нормально ли это для вашего варианта использования

~$ P=3 && for i in `seq 1 $P`; do echo $i; done
1
2
3

или предложение Литба

~$ P=3 && for ((i=1;i<=$P;i++)); do echo $i; done
1
2
3
1 голос
/ 18 декабря 2009
$ p=18
$ a='{1..$p}'
$ for num in $( eval echo $(eval echo $a) ); do echo $num; done
1 голос
/ 18 декабря 2009

В linux есть команда seq (к сожалению, в OS X она отсутствует).

#!/bin/bash
p=23
for i in `seq 1 $p`;
do
    echo $i
done    

Обходной путь OS X: http://scruss.com/blog/2008/02/08/seq-for-os-x/comment-page-1/

1 голос
/ 18 декабря 2009

Если он доступен, команда seq может сделать то же самое. Ваш пример может быть таким:

p=23
for i in `seq 1 $p`
do
    echo $i
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...