Bash flag basati su istruzioni if [duplicate]

Questa domanda ha già una risposta qui :

Commenti

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:


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 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *