条件&&コマンド+終了

条件&&コマンド+終了

簡単なシェルツールを書いている間、どのように作業するのか分からないという節を見つけました。

  [ "$#" -ne 3 ] || echo "wrong number of arguments" && exit

エコーが失敗する可能性がある状況を想像するのは難しいので、上記は期待どおりに機能します。しかし、echoが失敗する可能性がありますが、まだ実行されているコマンドに置き換えるとどうなりますかexit

デフォルトのシェルではなくexit作成されたシェルがシャットダウンされるため、機能しません。( )

  [ "$#" -ne 3 ] && ( command ; exit )

これは常に終了します。

  [ "$#" -ne 3 ] && command ; exit 

詳細な構文を使用できます。

 if [ "$#" -ne 3 ] ; then 
      command 
      exit
 fi

しかし、私が関与したくないif構文を単純に保つには、どのようにexitこのような文字列コマンドの条件付き実行を含めることができますか?

ベストアンサー1

中かっこでコマンドをグループ化できます。

[ "$#" -ne 3 ] || { command; exit; }

{ list; }リストされたコマンドがサブシェルではなく現在のシェルのコンテキストで実行されるようにします。

詳しくはこちらbash グループ化コマンド

おすすめ記事