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 $TEST
nicht vorhanden, wird es zu nichts erweitert und $test_or
enthä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, $TEST
sofern 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 echo
fü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