GNU/Linux >> Linux Esercitazione >  >> Linux

Eseguire un comando utilizzando argomenti che provengono da un array?

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.


Linux
  1. Utilizzo di Stratis per gestire l'archiviazione Linux dalla riga di comando

  2. Utilizzando il comando passwd dall'interno di uno script di shell

  3. Eseguire nuovamente il comando precedente con argomenti diversi

  4. Utilizzo di jq per recuperare il valore della chiave dall'output json

  5. Come eseguire il comando Vim dalla shell?

Come eseguire comandi dall'input standard utilizzando Tee e Xargs in Linux

Condividi file su Internet dalla riga di comando utilizzando Transfer.sh

Come eseguire periodicamente un comando in Linux usando Watch

Come rimuovere le righe da un file usando il comando Sed

Googler:esegui ricerche su Google dalla riga di comando

Esegui processi in background in Linux usando il comando Screen