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

Итерацию через параметры пропуска первого

Привет, у меня есть следующее:

bash_script parm1 a b c d ..n

Я хочу повторить и распечатать все значения в командной строке, начиная с a, а не из parm1

4b9b3361

Ответ 1

Это должно сделать это:

#ignore first parm1
shift

# iterate
while test ${#} -gt 0
do
  echo $1
  shift
done

Ответ 2

Вы можете "срезать" массивы в bash; вместо shift вы можете использовать

for i in "${@:2}"
do
    echo "$i"
done

[email protected] - это массив всех аргументов командной строки, ${@:2} - это тот же массив, что и первый элемент. Двойные кавычки обеспечивают правильную обработку пробелов.

Ответ 3

Этот метод сохранит первый параметр, если вы хотите использовать его позже

#!/bin/bash

for ((i=2;i<=$#;i++))
do
  echo ${!i}
done

или

for i in ${*:2} #or use [email protected]
do
  echo $i
done

Ответ 4

Другой аромат, немного короче, который хранит список аргументов

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

Ответ 5

Вы можете использовать неявную итерацию для позиционных параметров:

shift
for arg
do
    something_with $arg
done

Как вы можете видеть, вам не нужно включать "[email protected]" в оператор for.