Bashの条件が複数文の場合

Bashの条件が複数文の場合

次のif条件で複数の文を実行したいと思います。

[[ -e cli.tar.gz ]] && `tar -xvf cli.tar.gz -C ~/` || 
        echo "cli.tar.gz can not be found. Exiting" >&2 && exit 1

cli.tar.gzを見つけてタールすると、出口1に到達します。

[[ -e cli.tar.gz ]] && tar -xvf cli.tar.gz -C ~/ || 
   { echo "cli.tar.gz can not be found. Exiting" >&2; exit 1; }

関数の末尾にUnexpected token "}"エラーが発生します(この行は関数の一部です)。

フォーマットされたif条件を作成して問題を解決しました。

if [[ -e cli.tar.gz ]]
then
    if [[ ! `tar -xvf cli.tar.gz -C ${UDM_REMOTE}` ]]
    then
        echo "cli.tar.gz can not be found. Exiting" >&2; exit 1;
    fi
fi

しかし、最初に達成しようとしていたように、1行にネストされたif条件を実行するソリューションは何ですか?

アップデート1 @uweと@goldilocksの答えのおかげで、以下の説明を更新しました。

[[ ! -e cli.tar.gz ]] && ! `tar -xvf cli.tar.gz -C ~/` && \ 
  echo "cli.tar.gz can not be found (or tar failed). Exiting" >&2 && exit 1

ベストアンサー1

if [[ ! -e cli.tar.gz ]] || ! tar -xvf cli.tar.gz -C ~/ ; then 
    echo "cli.tar.gz can not be found (or tar failed). Exiting" >&2 && exit 1
fi

または完全に避けたい場合は、次のようにしてくださいif

( [[ ! -e cli.tar.gz ]] || ! tar -xvf cli.tar.gz -C ~/ ) && { echo "cli.tar.gz can not be found (or tar failed). Exiting" >&2 ; exit 1 ; }

おすすめ記事