Supposons que j'ai un programme graphique nommé app
. Exemple d'utilisation :app -t 'first tab' -t 'second tab'
ouvre deux "onglets" dans ce programme.
La question est :comment puis-je exécuter la commande (c'est-à-dire app
) depuis un bash
script si le nombre d'arguments peut varier ?
Considérez ceci :
#!/bin/bash
tabs=(
'first tab'
'second tab'
)
# Open the app (starting with some tabs).
app # ... How to get `app -t 'first tab' -t 'second tab'`?
Je voudrais que le script ci-dessus ait un effet équivalent à app -t 'first tab' -t 'second tab'
. Comment un tel script bash peut-il être écrit ?
Edit :notez que la question porte sur la composition d'arguments de ligne de commande à la volée à l'aide d'un tableau d'arguments.
Réponse acceptée :
Donner les arguments d'un tableau est facile, "${array[@]}"
développe les entrées du tableau sous forme de mots distincts (arguments). Nous avons juste besoin d'ajouter le -t
drapeaux. Pour ce faire, nous pouvons boucler sur le premier tableau et créer un autre tableau pour la liste complète des arguments, en ajoutant le -t
drapeaux au fur et à mesure :
#!/bin/bash
tabs=("first tab" "second tab")
args=()
for t in "${tabs[@]}" ; do
args+=(-t "$t")
done
app "${args[@]}"
Utilisez "[email protected]"
au lieu de "${tabs[@]}"
pour prendre les arguments de ligne de commande du script au lieu d'une liste codée en dur.