Commentaires
- Couvert dans Et si…?
Réponse
Vous pouvez créer la commande en un tableau:
#!/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
Et puis exécutez-le avec:
"${cmd[@]}"
Notez les guillemets autour de la dernière partie et les parenthèses autour des affectations ci-dessus. La syntaxe est moche, mais elle fonctionne face à des arguments contenant des espaces blancs et autres. (Utilisez des guillemets pour ajouter des arguments avec des espaces, par exemple cmd+=("foo bar")
)
Associés, avec des méthodes moins laides et des moyens déchouer:
- Comment exécuter une commande stockée dans une variable?
- Utilisation du shell variables pour les options de commande
Dans des cas simples, comme cet argument facultatif ici, vous pouvez vous en tirer avec lextension de valeur alternative:
var=x myscript ${var:+"-a"} -b 76
Ici, ${var:+foo}
insère foo
if var
nest pas vide (donc var=ON
, var=FALSE
, var=x
linsérerait tous) , et rien sil est vide ou non défini (var=
, ou unset var
). Soyez prudent avec les problèmes de citations habituels.
Commentaires
- +1 Cette syntaxe est moche et elle est plus complexe, mais la solution est évolutive, alors ma solution est plus simple mais évoluerait rapidement en désordre si plus de combinaisons de drapeaux étaient envisagées.
- Merci! Exactement ce que je ' cherche!
- @theta, a ajouté une autre option, une moins moche et plus sujette à devenir désordonnée si elle est développée.
Réponse
Si je vous comprends bien:
var=ON if [ "$var" = "ON" ]; then /home/username/myscript -a -b 76 else /home/username/myscript -b 76 fi