Comment convertir des arguments de ligne de commande en un tableau de scripts bash?
Je veux prendre ceci:
./something.sh arg1 arg2 arg3
et le convertir en
myArray=( arg1 arg2 arg3 )
afin que je puisse utiliser myArray pour une utilisation ultérieure dans le script.
Ce précédent article SO se rapproche, mais n'aborde pas la façon de créer un tableau: Comment analyser les arguments de ligne de commande dans Bash?
J'ai besoin de convertir les arguments en un tableau de script bash régulier; Je me rends compte que je pourrais utiliser d'autres langages (Python, par exemple) mais que je dois le faire dans bash. Je suppose que je recherche une fonction "append" ou quelque chose de similaire?
MISE À JOUR: Je voulais également demander comment vérifier zéro argument et attribuer une valeur de tableau par défaut, et grâce à la réponse ci-dessous, j'ai pu faire fonctionner cela:
if [ "$#" -eq 0 ]; then
myArray=( defaultarg1 defaultarg2 )
else
myArray=( "$@" )
fi
set
vous permet de définir les paramètres de position de l'oscilloscope. Il vous permet également de définir les options du shell. Vous pouvez le faireset foo
, ce qui signifie se$1
développer en "foo", mais si vos paramètres commencent par un tiretset
, vous supposerez que vous voulez définir une option shell. Le double tiret garantit que tous les paramètres suivants sont interprétés comme des paramètres de position à définir.echo $@
affichera tous les arguments, maisecho $myArray
n'imprimera que le premier élément. Pour les voir tous, utilisezecho ${myArray[@]}
."${myArray[@]}"
. Si vous souhaitez parcourir le tableau, vous avez besoin des guillemets pour éviter de diviser ses éléments individuels sur IFSPeut-être que cela peut aider:
vous pouvez également parcourir les arguments en omettant 'in':
sera équivalent
la source
arg
champ - est-ce une variable prédéfinie?${var}
est étendu au contenu devar
.${var[n]}
est étendu au contenu de l'élémentn
du tableauvar
. Est-ce${var[@]}
alors développer le tableau entier, c'est-à-dire${var[0]} ${var[1]} ... ${var[n]}
(avecn
l'index du dernier élément)?En fait, la liste des paramètres est accessible avec
$1 $2 ...
etc.Ce qui est exactement équivalent à:
Ainsi, la liste des paramètres peut être modifiée avec set,
et
${!i}
c'est le bon moyen d'y accéder:Pour votre cas spécifique, cela pourrait être utilisé (sans avoir besoin de tableaux), pour définir la liste des arguments quand aucun n'a été donné:
ce qui se traduit par cette expression encore plus simple:
la source
echo "$#" "$i+1" "${!i}";
pour obtenir la sortie exactement comme indiqué?Voici une autre utilisation:
la source
Plus simple encore, vous pouvez opérer directement sur
$@
;)Voici comment passer une liste d'arguments directement à partir de l'invite:
la source
for stuff in "$@" ; do ...
c'est la même chose quefor stuff ; do ...
:)Vue côte à côte de la façon dont le tableau et $ @ sont pratiquement identiques.
Code:
Contribution:
Production:
la source
L'importance des guillemets doubles mérite d'être soulignée. Supposons qu'un argument contienne des espaces.
Code:
Production:
la source