Supponiamo di avere un programma grafico chiamato app
. Esempio di utilizzo:app -t 'first tab' -t 'second tab'
apre due "schede" in quel programma.
La domanda è:come posso eseguire il comando (es. app
) da un bash
script se il numero di argomenti può variare?
Considera questo:
#!/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'`?
Vorrei che lo script precedente avesse un effetto equivalente a app -t 'first tab' -t 'second tab'
. Come può essere scritto uno script bash del genere?
Modifica:nota che la domanda riguarda la composizione al volo di argomenti della riga di comando utilizzando una matrice di argomenti.
Risposta accettata:
Fornire gli argomenti da un array è facile, "${array[@]}"
si espande alle voci dell'array come parole distinte (argomenti). Dobbiamo solo aggiungere il -t
bandiere. Per farlo, possiamo scorrere il primo array e costruire un altro array per l'elenco completo degli argomenti, aggiungendo il -t
bandiere mentre procediamo:
#!/bin/bash
tabs=("first tab" "second tab")
args=()
for t in "${tabs[@]}" ; do
args+=(-t "$t")
done
app "${args[@]}"
Usa "[email protected]"
invece di "${tabs[@]}"
per prendere gli argomenti della riga di comando dello script invece di un elenco codificato.