Transmettre des arguments multi-mots à une fonction bash

À l'intérieur d'un script bash fonction, j'ai besoin de travailler avec les arguments de ligne de commande du script, et aussi avec une autre liste d'arguments. Donc, je suis en train de passer deux listes d'arguments à une fonction, le problème est que les arguments multi-mots d'obtenir split.

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"

de l'appel du script me donne

myscript.sh a b 'c d'
a
b
c
d
.
x
y
'z
t'

Puisqu'il y a deux listes, elles doivent être transmis ensemble à la fonction, la question est de savoir comment itérer les éléments tout en respectant multi-parole éléments entre guillemets simples 'c' et 'z t'?

La solution de contournement que j'ai (voir ci-dessous) permet l'utilisation de BASH_ARGV donc j'ai besoin de passer une seule liste à la fonction. Cependant, j'aimerais obtenir une meilleure compréhension de ce qui se passe et ce qui est nécessaire pour faire le travail ci-dessus.

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'

de l'appel du script me donne

myscript.sh a b 'c d'
c d
b
a
.
x
y
z t

... Qui est la façon dont j'en ai besoin (sauf que le premier de la liste est inversée, mais qui serait tolérable, je suppose)

source d'informationauteur haelix | 2012-04-08