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

あなたはそれを使用することができますbeginそしてend条件文も同様です。

~から魚のチュートリアル:

より複雑な条件の場合は、startとendを使用してその部分をグループ化します。

より簡単な例については、以下を参照してください。この回答スタックオーバーフローで。

コードの場合(とをに置き換えます。begin ;); 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

これは、条件自体が複雑なコマンドである場合に最適です。

関連情報