127 votes

Bash: convertit les arguments de la ligne de commande en tableau

Comment puis-je convertir des arguments de ligne de commande dans un script bash tableau?

Je veux profiter de cette:

./something.sh arg1 arg2 arg3

et la convertir en

myArray=( arg1 arg2 arg3 )

afin que je puisse utiliser myArray pour une utilisation ultérieure dans le script.

Cette SORTE de post est proche, mais ne va pas dans la façon de créer un tableau: Comment dois-je analyser les arguments de ligne de commande de bash?

J'ai besoin de convertir les arguments en un script bash tableau; je me rends compte que je pouvais utiliser d'autres langages (Python, par exemple), mais besoin de faire cela dans bash. Je suppose que je suis à la recherche d'une fonction "append" ou quelque chose de similaire?

Mise à JOUR: je voulais aussi vous demander comment vérifier les arguments zéro et d'attribuer une valeur par défaut de la matrice de valeur, et merci pour la réponse ci-dessous, a été en mesure d'obtenir ce travail:

if [ "$#" -eq 0 ]; then
  myArray=( defaultarg1 defaultarg2 )
else
  myArray=( "$@" )
fi

165voto

kojiro Points 24374

En fait vos arguments de ligne de commande sont pratiquement comme un tableau déjà. Au moins, vous pouvez traiter l' $@ variable comme un tableau. Cela dit, vous pouvez le convertir en un véritable tableau comme ceci:

myArray=( "$@" )

Si vous voulez juste le type des arguments et de les introduire dans l' $@ de la valeur, utilisez set:

$ set -- apple banana "kiwi fruit"
$ echo "$#"
3
$ echo "$@"
apple banana kiwi fruit

Comprendre comment utiliser l'argument de la structure est particulièrement utile dans POSIX sh, qui n'a rien d'autre comme un tableau.

49voto

Nahuel Fouilleul Points 3018

Peut-être que cela peut aider:

 myArray=("$@") 
 

vous pouvez aussi parcourir des arguments en omettant 'in':

 for arg; do
   echo "$arg"
done
 

sera équivalent

 for arg in "${myArray[@]}"; do
   echo "$arg"
done
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: