Если вы хотите изменить позиционные параметры, $*
не подходит. Рассмотрим следующий сценарий:
for arg in $*; do
echo "$arg"
done
Когда вы запустите bash script.sh foo 'bar baz'
, вы получите:
foo
bar
baz
Вы ищете "$@"
вместо:
for arg in "$@"; do
echo "$arg"
done
Для тех же параметров это приведет к:
foo
bar baz
Подробнее об этих переменных можно прочитать в разделе Специальные параметры вman bash
.
Теперь, если вы хотите напечатать параметры в обратном порядке, вы можете использовать счетный цикл:
for ((i = $#; i > 0; i--)); do
echo "${!i}"
done
Синтаксис ${!varname}
используется дляразвернуть до значения переменной, указанной $i
. Например, когда сценарий имеет 10 параметров, мы хотим вывести ${10}
, $9
, $8
и т. Д. До $1
.
Работа с индексами $@
может быть сложно, как в предыдущем примере. Это может быть легче понять, если вы храните содержимое $@
в обычном массиве:
arr=("$@")
for ((i = ${#arr[@]} - 1; i >= 0; i--)); do
echo "${arr[i]}"
done