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="$@"
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 "$@"; 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
Vous devez vous connecter pour publier un commentaire.
En supposant que vous appelez votre script avec args
a b 'c d'
la sortie est:Pierre.O réponse ci-dessus fonctionne très bien, et c'est un addmendum, avec un exemple.
J'ai besoin d'une fonction ou d'un script qui permettrait de prendre des multi-parole des arguments, qui pourrait alors être utilisé pour rechercher dans la liste des processus en cours d'exécution et de tuer ceux qui correspondent à l'un des arguments. Le script suivant permet. La fonction
kill_processes_that_match_arguments
besoin que d'un seulfor
boucle, parce que mon besoin était uniquement pour effectuer une itération sur l'ensemble de tous les arguments de la fonction. Testé pour fonctionner.