Wie verweise ich auf eine Variable in der Fischschale mit einem Standard-Fallback?

Antworten:

10

Ich glaube, Sie brauchen eine temporäre Variable (oder eine Funktion). Wenn $TESTnicht vorhanden, wird es zu nichts erweitert und $test_orenthält nur 1. Es wäre schön, eine echte Möglichkeit zu haben, aber derzeit ist die Syntax ein Problem, und es scheint, dass sie für die meisten Zwecke nicht wirklich benötigt wird.

set test_or $TEST 1
echo $test_or[1]

Wenn Sie lediglich Änderungen vornehmen möchten, $TESTsofern dies noch nicht geschehen ist, können Sie diese verwenden set -q.

set -q TEST; or set TEST 1
echo $TEST
Konrad Borowski
quelle
6

Um auf eine Variable zu verweisen und einen Standardwert in der Zeile bereitzustellen, können Sie eine Befehlsersetzung verwenden, die eine Bedingung enthält, die echofür beide Zweige gilt.

> echo (if set -q someVar; echo $someVar; else; echo 'a default value'; end)
a default value
> set someVar 42
> echo (if set -q someVar; echo $someVar; else; echo 'a default value'; end)
42

Da dies sehr ausführlich ist, können Sie die Variable in einer anderen Zeile initialisieren, wenn sie nicht gesetzt ist.

> echo $otherVar

> set -q otherVar; or set otherVar 'a default value'
> echo $otherVar
a default value

Wenn Sie wirklich die Möglichkeit haben möchten, eine Standard-Inline zu ersetzen, können Sie dies in einer Funktion unter Verwendung der Indirektion tun und diese Funktion dann aufrufen.

> function orDefault
      set -q $argv[1]; and echo $$argv[1]; or echo $argv[2]
  end
>
> echo $moreVar

> echo (orDefault moreVar 'a default value')
a default value
> set moreVar 42
> echo (orDefault moreVar 'a default value')
42
Patrick Redmond
quelle