如何使用默认后备引用鱼壳中的变量

Sco*_*t B 20 shell fish

什么是鱼贝等同于以下的bash:

echo ${TEST:-1}
Run Code Online (Sandbox Code Playgroud)

在 bash 中,如果有 1,则打印 TEST 的值,如果没有,则打印 1。

Kon*_*ski 15

我相信您需要临时变量(或函数)。如果$TEST不存在,则将其扩展为空,并且$test_or仅包含1. 有真正的方法会很好,但目前语法是有问题的,而且对于大多数目的似乎并不真正需要它。

set test_or $TEST 1
echo $test_or[1]
Run Code Online (Sandbox Code Playgroud)

此外,如果您只想修改$TEST它不存在的内容,则可以使用set -q.

set -q TEST; or set TEST 1
echo $TEST
Run Code Online (Sandbox Code Playgroud)


小智 7

要引用一个变量并提供一个内联的默认值,您可以使用包含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
Run Code Online (Sandbox Code Playgroud)

由于这有点冗长,您可以在未设置时在不同的行上初始化变量。

> echo $otherVar

> set -q otherVar; or set otherVar 'a default value'
> echo $otherVar
a default value
Run Code Online (Sandbox Code Playgroud)

如果您真的希望能够替换默认的内联,您可以使用间接在函数中完成,然后调用该函数。

> 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
Run Code Online (Sandbox Code Playgroud)