Bash-Flags basierend auf if-Anweisungen [duplizieren]

Diese Frage hat hier bereits Antworten :

Kommentare

Antwort

Sie können den Befehl einbauen ein 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 

Führen Sie es dann aus mit:

"${cmd[@]}" 

Beachten Sie die Anführungszeichen um den letzten Teil und die Klammer um die obigen Aufgaben. Die Syntax ist hässlich, funktioniert aber angesichts von Argumenten, die Leerzeichen und dergleichen enthalten. (Verwenden Sie Anführungszeichen, um Argumente mit Leerzeichen hinzuzufügen, z. B. cmd+=("foo bar"))

Verwandte, mit weniger hässlichen Methoden und Möglichkeiten, wie sie fehlschlagen können:


In einfachen Fällen, wie dem einen optionalen Argument hier, könnten Sie mit der alternativen Werterweiterung davonkommen:

var=x myscript ${var:+"-a"} -b 76 

Hier fügt ${var:+foo} foo ein, wenn var ist nicht leer (also würde var=ON, var=FALSE, var=x alles einfügen) und nichts, wenn es leer oder nicht gesetzt ist (var= oder unset var). Seien Sie vorsichtig mit den üblichen Zitierproblemen.

Kommentare

  • +1 Diese Syntax ist hässlich und komplexer, aber die Lösung ist skalierbar Meine Lösung ist einfacher, würde sich aber schnell zu einem Chaos entwickeln, wenn mehr Flaggenkombinationen in Betracht gezogen würden.
  • Danke! Genau das, wonach ich ' suche!
  • @theta, fügte eine weitere Option hinzu, eine weniger hässlich und anfälliger für Unordnung, wenn sie erweitert wird.

Antwort

Wenn ich Sie richtig verstehe:

var=ON if [ "$var" = "ON" ]; then /home/username/myscript -a -b 76 else /home/username/myscript -b 76 fi 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.