Передача аргументов, состоящих из нескольких слов, в функцию bash.

Внутри функции скрипта 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

... Вот как мне это нужно (за исключением того, что первый список перевернут, но это было бы терпимо, я думаю)

14
задан haelix 8 April 2012 в 11:21
поделиться