Was ist die Fischschale , die der folgenden Bash entspricht:
echo ${TEST:-1}
In der Bash würde dies den Wert von TEST ausgeben, wenn es einen gab, oder 1, wenn es keinen gab.
Was ist die Fischschale , die der folgenden Bash entspricht:
echo ${TEST:-1}
In der Bash würde dies den Wert von TEST ausgeben, wenn es einen gab, oder 1, wenn es keinen gab.
Antworten:
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
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