Ответ 1
Это должно сделать это:
#ignore first parm1
shift
# iterate
while test ${#} -gt 0
do
echo $1
shift
done
Привет, у меня есть следующее:
bash_script parm1 a b c d ..n
Я хочу повторить и распечатать все значения в командной строке, начиная с a, а не из parm1
Это должно сделать это:
#ignore first parm1
shift
# iterate
while test ${#} -gt 0
do
echo $1
shift
done
Вы можете "срезать" массивы в bash; вместо shift
вы можете использовать
for i in "${@:2}"
do
echo "$i"
done
[email protected]
- это массив всех аргументов командной строки, ${@:2}
- это тот же массив, что и первый элемент. Двойные кавычки обеспечивают правильную обработку пробелов.
Этот метод сохранит первый параметр, если вы хотите использовать его позже
#!/bin/bash
for ((i=2;i<=$#;i++))
do
echo ${!i}
done
или
for i in ${*:2} #or use [email protected]
do
echo $i
done
Другой аромат, немного короче, который хранит список аргументов
shift
for i in "[email protected]"
do
echo $i
done
Вы можете использовать неявную итерацию для позиционных параметров:
shift
for arg
do
something_with $arg
done
Как вы можете видеть, вам не нужно включать "[email protected]"
в оператор for
.