Подтвердить что ты не робот

Использование диапазона аргументов командной строки в bash для цикла печатает скобки, содержащие аргументы

Это, наверное, хромой вопрос. Но я получаю 3 аргумента из командной строки [ bash script]. Затем я пытаюсь использовать их в цикле for.

for i in {$1..$2}
    do action1
done

Это, похоже, не работает, и если $1 - "0", а $2 - 2, он печатает {0..2}' and calls action1` только один раз. Я ссылался на различные примеры, и это, по-видимому, правильное использование. Может кто-нибудь, пожалуйста, скажите мне, что здесь нужно исправить?

Спасибо заранее.

4b9b3361

Ответ 1

Как насчет:

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

Ответ 2

Вы можете нарезать вход с помощью ${@:3} или ${@:3:8}, а затем перебрать его

Например, для печати аргументов, начиная с 3

for i in ${@:3} ; do echo $i; done

или напечатать 8 аргументов, начиная с 3 (так, аргументы с 3 по 10)

for i in ${@:3:8} ; do echo $i; done

Ответ 3

Используйте переменную [email protected]?

for i in [email protected]
do
    echo $i
done

Если вы просто хотите использовать 1-й и 2-й аргументы, просто

for i in $1 $2 

Если ваши $1 и $2 являются целыми числами, и вы хотите создать диапазон, используйте синтаксис C для цикла (bash)

for ((i=$1;i<=$2;i++))
do
...
done

Ответ 4

У меня была аналогичная проблема. Я думаю, что проблема заключается в разыменовании $1 в скобках {} '. Следующая альтернатива работала для меня.

#!/bin/bash
for ((i=$1;i<=$2;i++))
do
   ...
done

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

Ответ 5

#/bin/bash
for i
do
  echo Value: $i
done

Это будет охватывать все аргументы, данные в файле script. Обратите внимание, что нет "делать" или что-либо еще после переменной цикла i.