Questa domanda ha già una risposta qui :
Commenti
- Trattata in Ma cosa succede se …?
Risposta
Puoi creare il comando in un array:
#!/bin/bash var=ON cmd=( /home/username/myscript ) # create array with one element if [ "$var" == "ON" ]; then cmd+=( -a ) # append to the array fi cmd+=( -b 76 ) # append two elements
E poi eseguilo con:
"${cmd[@]}"
Nota le virgolette intorno allultima parte e la parentesi attorno agli incarichi sopra. La sintassi è brutta, ma funziona di fronte ad argomenti contenenti spazi bianchi e simili. (Usa le virgolette per aggiungere argomenti con spazi, ad esempio cmd+=("foo bar")
)
Correlati, con metodi meno brutti e modi in cui possono fallire:
- Come possiamo eseguire un comando memorizzato in una variabile?
- Uso della shell variabili per le opzioni di comando
In casi semplici, come quellargomento opzionale qui, potresti farla franca con lespansione del valore alternativo:
var=x myscript ${var:+"-a"} -b 76
Qui, ${var:+foo}
inserisce foo
if var
non è vuoto (quindi var=ON
, var=FALSE
, var=x
lo inseriranno tutti) e nulla se è vuoto o non impostato (var=
o unset var
). Fai attenzione ai soliti problemi di citazione.
Commenti
- +1 Questa sintassi è brutta ed è più complessa, ma la soluzione è scalabile, mentre la mia soluzione è più semplice ma evolverebbe rapidamente in un pasticcio se si considerassero più combinazioni di flag.
- Grazie! Esattamente quello che ' sto cercando!
- @theta, ha aggiunto unaltra opzione, una meno brutta e più incline a sporcarsi se espansa.
Risposta
Se ho capito bene:
var=ON if [ "$var" = "ON" ]; then /home/username/myscript -a -b 76 else /home/username/myscript -b 76 fi