1381 Stimmen

Zuweisung von Standardwerten an Shell-Variablen mit einem einzigen Befehl in der Bash

Ich habe eine ganze Reihe von Tests auf Variablen in einem Bash (3.00) Shell-Skript, wo, wenn die Variable nicht gesetzt ist, dann weist es einen Standard, z. B.:

if [ -z "${VARIABLE}" ]; then 
    FOO='default'
else 
    FOO=${VARIABLE}
fi

Ich glaube mich zu erinnern, dass es eine Syntax gibt, um dies in einer Zeile zu tun, etwas, das einem ternären Operator ähnelt, z. B.:

FOO=${ ${VARIABLE} : 'default' }

(obwohl ich weiß, dass das nicht funktionieren wird...)

Bin ich verrückt, oder gibt es so etwas?

2 Stimmen

Shell-Parameter-Erweiterung in der Bash-Shell-Referenz ist ein guter Ausgangspunkt: tiswww.case.edu/php/chet/bash/bashref.html#Shell-Expansions .

3 Stimmen

Gnu.org-Dokumentation für Erweiterung der Shell-Parameter (Hinweis: Es gibt noch viele andere coole Sachen, die man machen kann!)

45voto

Curtis Mattoon Punkte 4522

FWIW, Sie können eine Fehlermeldung wie folgt angeben:

USERNAME=${1:?"Specify a username"}

Es wird eine Meldung wie diese angezeigt und mit Code 1 beendet:

./myscript.sh
./myscript.sh: line 2: 1: Specify a username

Ein vollständigeres Beispiel für alles:

#!/bin/bash
ACTION=${1:?"Specify 'action' as argv[1]"}
DIRNAME=${2:-$PWD}
OUTPUT_DIR=${3:-${HOMEDIR:-"/tmp"}}

echo "$ACTION"
echo "$DIRNAME"
echo "$OUTPUT_DIR"

Output:

$ ./script.sh foo
foo
/path/to/pwd
/tmp

$ export HOMEDIR=/home/myuser
$ ./script.sh foo
foo
/path/to/pwd
/home/myuser
  • $ACTION nimmt den Wert des ersten Arguments und beendet sich, wenn es leer ist
  • $DIRNAME ist das 2. Argument und ist 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.

42voto

ghostdog74 Punkte 305138

Siehe aquí unter 3.5.3(Schalenparametererweiterung)

In Ihrem Fall also

${VARIABLE:-default}

25voto

Rob Wells Punkte 35303

Dann gibt es noch die Möglichkeit, die "if"-Konstruktion knapper zu formulieren:

FOO='default'
[ -n "${VARIABLE}" ] && FOO=${VARIABLE}

13voto

Assaf Shomer Punkte 1390

Hier ein Beispiel

#!/bin/bash

default='default_value'
value=${1:-$default}

echo "value: [$value]"

Speichern Sie es als script.sh und machen Sie es ausführbar. es ohne Parameter ausführen

./script.sh
> value: [default_value]

mit Param ausführen

./script.sh my_value
> value: [my_value]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X