在鱼壳中,如何设置具有默认回退的变量?

Nic*_*s C 4 environment-variables fish

我在寻找以下bash语法的等效项,但在fish shell中:

local datafile="${_Z_DATA:-$HOME/.z}"
Run Code Online (Sandbox Code Playgroud)

即定义一个局部变量,$_Z_DATA如果该变量被定义,它将取值,否则将取$HOME/.z

che*_*ner 6

据我所知,没有语法。你需要像

set datafile "$_Z_DATA"
test -z "$datafile"; and set datafile "$HOME/.z"
Run Code Online (Sandbox Code Playgroud)

要么

if set -q _Z_DATA; and test -n _Z_DATA
  set datafile "$_Z_DATA"
else
  set datafile "$HOME/.z"
fi
Run Code Online (Sandbox Code Playgroud)

与相比bash,在函数内部定义的变量会自动在该函数局部,因此不需要等价的变量local。(此答案的先前版本使用该-l选项来本地化变量,但这使它对于发生在其中的任何块均 set是局部的。)