Fish

如何在fish中的if語句中對多個條件進行分組

  • April 11, 2020

照原樣,下面的程式碼是無效的,因為括號不能那樣使用。如果我們刪除它們,它執行良好,並輸出:

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

您也可以將beginandend用於條件句:

魚教程

對於更複雜的條件,使用 begin 和 end 對其中的部分進行分組。

對於一個更簡單的範例,您可以查看來自 stackoverflow的這個答案。

對於您的程式碼,您只需替換(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

替代解決方案將條件鏈的一部分外包給一個函式

像這樣:

#!/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

如果條件本身是複雜的命令,這是最有意義的。

引用自:https://unix.stackexchange.com/questions/426928