答案1
我相信你需要临时变量(或函数)。如果$TEST
不存在,则扩展为空,$test_or
仅包含1
.如果有真正的方法来做到这一点那就太好了,但目前语法存在问题,而且对于大多数用途来说似乎并不真正需要它。
set test_or $TEST 1
echo $test_or[1]
另外,如果您只想修改$TEST
它尚不存在的情况,则可以使用set -q
.
set -q TEST; or set TEST 1
echo $TEST
答案2
要引用变量并提供内联默认值,您可以使用包含echo
在两个分支上执行的条件的命令替换。
> 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
由于这有点冗长,因此您可以在未设置变量时在不同的行上初始化该变量。
> echo $otherVar
> set -q otherVar; or set otherVar 'a default value'
> echo $otherVar
a default value
如果您确实希望能够替换默认内联,您可以使用间接在函数中执行此操作,然后调用该函数。
> 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