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:
- Wie können wir einen in einer Variablen gespeicherten Befehl ausführen?
- Shell verwenden Variablen für Befehlsoptionen
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