Ich habe eine ganze Reihe von Tests für Variablen in einem Bash (3.00) -Shell-Skript, bei denen, wenn die Variable nicht festgelegt ist, eine Standardeinstellung zugewiesen wird, z.
if [ -z "${VARIABLE}" ]; then
FOO='default'
else
FOO=${VARIABLE}
fi
Ich erinnere mich an eine Syntax in einer Zeile, die einem ternären Operator ähnelt, z.
FOO=${ ${VARIABLE} : 'default' }
(obwohl ich weiß, dass das nicht funktioniert ...)
Bin ich verrückt oder gibt es so etwas?
Antworten:
Ganz in der Nähe von dem, was Sie gepostet haben:
Oder wird zuzuordnen , die
default
zuVARIABLE
auch:quelle
Für Befehlszeilenargumente:
Dies wird
VARIABLE
dem Wert des ersten an das Skript übergebenen Arguments oder dem Wert zugewiesen,DEFAULTVALUE
wenn kein solches Argument übergeben wurde.quelle
Wenn die Variable gleich ist, dann
weist VARIABLE DEFAULT_VALUE zu, falls nicht definiert. Die doppelten Anführungszeichen verhindern das Globbing und das Teilen von Wörtern.
Siehe auch Abschnitt 3.5.3, Erweiterung der Shell-Parameter , im Bash-Handbuch.
quelle
HISTTIMEFORMAT
: ${FOO:=DEFAULT1} ${BAR:=DEFAULT2}
Auch Sie können als Standardwert den Wert einer anderen Variablen verwenden
eine Datei haben
defvalue.sh
./defvalue.sh first-value second-value
Ausgabe ausführenund
./defvalue.sh first-value
Ausgabe ausführenquelle
siehe hier unter 3.5.3 (Shell-Parametererweiterung)
also in deinem Fall
quelle
Zur Beantwortung Ihrer Frage und zu allen variablen Substitutionen
quelle
FWIW, Sie können eine Fehlermeldung wie folgt eingeben:
Dies zeigt eine Meldung wie diese an und wird mit Code 1 beendet:
Ein vollständigeres Beispiel für alles:
Ausgabe:
$ACTION
Nimmt den Wert des ersten Arguments und wird beendet, wenn es leer ist$DIRNAME
ist das 2. Argument und verwendet standardmäßig das aktuelle Verzeichnis$OUTPUT_DIR
ist das 3. Argument oder$HOMEDIR
(falls definiert) sonst ,/tmp
. Dies funktioniert unter OS X, aber ich bin mir nicht sicher, ob es portabel ist.quelle
Dann gibt es die Möglichkeit, Ihr "Wenn" -Konstrukt knapper auszudrücken:
quelle
Hier ist ein Beispiel
Speichern Sie dies als script.sh und machen Sie es ausführbar. Führen Sie es ohne Parameter aus
Führen Sie es mit param aus
quelle