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