if...を混ぜて{コマンドのグループ化}と[[test]]と論理演算子[off]

if...を混ぜて{コマンドのグループ化}と[[test]]と論理演算子[off]

編集する:もう一度試しましたが、今はうまくいきますbash。何が変わったのかわかりません。私のエディタ(Bash IDE拡張を含むVS Code)でまだfailed to parseエラーが発生しますが、スクリプトは正しく実行されます。この質問を削除する必要がありますか?

元の質問

私のスクリプトは現在、次のことを行います。

if cmd1; then
  echo Success
else
  if [[ "$x" == "z" ]] && cmd2; then
    echo Success
  else
    echo Failure
  fi
fi

続けて「一行」に減らそうとしますが、bash次のような言葉で喉が詰まります。

if cmd1 || { [[ "$x" = "z" ]] && cmd2; }; then
   echo Success
else
   echo Failure
fi

それ以外の場合は常に実行される{ grouping }ため、これが必要だと思います。&& cmdこの問題をどのように解決できますか?

ベストアンサー1

サブシェルを使用してグループ化できます。

if cmd1 || ( [[ "$x" == 'z' ]] && cmd2 ); then
  ...
else
  ...
fi

おすすめ記事