Shell 写fish-if语句有困难

Shell 写fish-if语句有困难,shell,if-statement,syntax,zsh,fish,Shell,If Statement,Syntax,Zsh,Fish,因此,我有以下if语句(最初来自我的.zshrc): 现在我试图将其移植到我的config.fish,我知道这与if上的[有关,但我不能完全理解语法。the[是可以的。fish中的两个不同部分是+x扩展修饰符和循环语法 在zsh中,“${NVIM\u LISTEN\u ADDRESS+x}”如果设置了$NVIM\u LISTEN\u ADDRESS,则计算结果为x,否则为空;然后比较它是否为空。这似乎是一种只检查变量是否已设置的迂回方法 关于循环,fish块总是以end结尾,并且不需要then或

因此,我有以下if语句(最初来自我的.zshrc):


现在我试图将其移植到我的
config.fish
,我知道这与if上的
[
有关,但我不能完全理解语法。

the
[
是可以的。fish中的两个不同部分是+x扩展修饰符和循环语法

在zsh中,
“${NVIM\u LISTEN\u ADDRESS+x}”
如果设置了
$NVIM\u LISTEN\u ADDRESS
,则计算结果为
x
,否则为空;然后比较它是否为空。这似乎是一种只检查变量是否已设置的迂回方法

关于循环,fish块总是以
end
结尾,并且不需要
then
do

所以这是最直接的捕鱼港:

if [ -n "$NVIM_LISTEN_ADDRESS" ]
    alias h='nvr -o'
    alias v='nvr -O'
    alias t='nvr --remote-tab'
end
这是更惯用的说法:

if set -q NVIM_LISTEN_ADDRESS
    abbr h 'nvr -o'
    abbr v 'nvr -O'
    abbr t 'nvr --remote-tab'
end

它使用了在适当位置膨胀的鱼。

感谢您提供了如此广泛的答案。
if set -q NVIM_LISTEN_ADDRESS
    abbr h 'nvr -o'
    abbr v 'nvr -O'
    abbr t 'nvr --remote-tab'
end