如何在 Fish 的 if 语句中对多个条件进行分组

如何在 Fish 的 if 语句中对多个条件进行分组

事实上,下面的代码是无效的,因为括号不能这样使用。如果我们删除它们,它会正常运行并输出:

true
true

代码:

#!/usr/bin/fish

if ( false ; and true ) ; or true
    echo "true"
else
    echo "false"
end

if false ; and ( true ; or true )
    echo "true"
else
    echo "false"
end

如何获取括号中所示的功能?

期望的输出:

true
false

答案1

您可以使用beginend对于条件语句也是如此:

鱼教程:

对于更复杂的条件,请使用 begin 和 end 对其中的各个部分进行分组。

对于一个更简单的例子,你可以看一下这个答案来自堆栈溢出。

对于您的代码,您只需替换(withbegin ;)with ; end

#!/usr/bin/fish

if begin ; false ; and true ; end ; or true
    echo "true"
else
    echo "false"
end

if false; and begin ; true ; or true ; end
    echo "true"
else
    echo "false"
end

答案2

替代解决方案:将条件链的一部分外包到函数中

像这样:

#!/usr/bin/fish

function _my_and_checker
    return $argv[1]; and argv[2]
end
function _my_or_checker
    return $argv[1]; or argv[2]
end

if _my_and_checker false true ; or true
    echo "true"
else
    echo "false"
end

if false; and _my_or_checker true true
    echo "true"
else
    echo "false"
end

如果条件本身是复杂的命令,则这是最有意义的。

相关内容