Bash flags basés sur les instructions if [duplicate]

Cette question a déjà des réponses ici :

Commentaires

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:


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 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *