Внутри функции скрипта bash мне нужно работать с аргументами командной строки скрипта, а также с другим списком аргументов. Итак, я пытаюсь передать функции два списка аргументов, проблема в том, что аргументы, состоящие из нескольких слов, разделяются.
function params()
{
for PARAM in $1; do
echo "$PARAM"
done
echo .
for ITEM in $2; do
echo "$ITEM"
done
}
PARAMS="$@"
ITEMS="x y 'z t'"
params "$PARAMS" "$ITEMS"
вызов скрипта дает мне
myscript.sh a b 'c d'
a
b
c
d
.
x
y
'z
t'
Так как есть два списка, они должны быть переданы в функцию как единое целое, вопрос заключается в том, как перебирать элементы, соблюдая элементы из нескольких слов, заключенные в одинарные кавычки 'cd' и з т?
Обходной путь, который у меня есть (см. ниже), использует BASH_ARGV, поэтому мне нужно передать в функцию только один список. Однако я хотел бы лучше понять, что происходит и что необходимо для выполнения вышеуказанной работы.
function params()
{
for PARAM in "${BASH_ARGV[@]}"; do
echo "$PARAM"
done
echo .
for ITEM in "$@"; do
echo "$ITEM"
done
}
params x y 'z t'
вызов сценария дает мне
myscript.sh a b 'c d'
c d
b
a
.
x
y
z t
... Вот как мне это нужно (за исключением того, что первый список перевернут, но это было бы терпимо, я думаю)