Цикл For указанного размера в оболочке поведения - PullRequest
2 голосов
/ 29 ноября 2011

Я пытаюсь сделать, казалось бы, простую вещь: скрипт, который берет переменную из командной строки ($ 1) и использует ее в качестве длины цикла for. Так что если команда запускается в терминале run.sh:

run.sh 5

запустит цикл for 5 раз. Это моя попытка:

#!/bin/sh

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

Но единственный вывод, который я получаю:

{1..5}

Как я могу решить эту проблему?

Примечание: я новичок в сценариях bash / shell.

1 Ответ

3 голосов
/ 29 ноября 2011

вы действительно используете оболочку bash.Не все оболочки (особенно true / bin / sh (bourne)) поддерживают эту функцию.Чтобы устранить неоднозначность в вашей ситуации, используйте

#!/bin/bash

в верхней части вашего сценария.

Одно из решений заключается в использовании

for i in $(eval echo  {1..$1} ); do echo $i; done

eval говорит "длятекущая командная строка, в данном случае echo ${1..$1}, пока не выполняйте команду, переоцените полную командную строку для любых расширяемых переменных. "

Если в вашей системе есть seq cmd, то выможет переписать это, поскольку

for i in $(seq 1 $1 ); do echo $i; done

seq является сокращением от последовательности и может принимать любое начальное и конечное число, а необязательный коэффициент «пропустить по», sa seq 0 5 100 будет считать от 5 до 100.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...