シェル条件&&、||後ろにいくつかのコマンドがリストされます。シェルスクリプト、ダッシュ

シェル条件&&、||後ろにいくつかのコマンドがリストされます。シェルスクリプト、ダッシュ

次の条件の後に複数のコマンドを実行しようとします。

[ $VAR ] || echo "Error msg" ; echo "exit"

そして駅

[ -z $VAR ] &&  echo "Error msg" ; echo "exit"

期待どおりに動作しないことを知っています。実際に以前に行う方法を知っていましたが、実行する方法を忘れていました。私はif'を使用したり、()andを介して束ねるなど、多くの選択肢を完全に知っています{}。を使用すると、()実行中のスクリプトを終了しない子プロセスが生成されます。使用すると{}動作しますが、より読みやすい代替手段が存在することを知っています。

私はこれを使って:完璧です!今は全く覚えておらず、私が書いた台本も失ってしまいました。

この記事をどのように書くかを知っている人なら、助けてくれたら:本当に感謝します!

ベストアンサー1

より読みやすい選択肢は次のとおりです。

if [ -z "$VAR" ]; then
  echo "Error msg" 1>&2
  exit 1
fi

私はそれがあなたが探しているものではないことを知っています。しかし、これは書くべきです。ここで&&and の使用は||少し神秘的です。私はあなたが何を覚えているのか(または間違って覚えているのか)はわかりませんが、それが何であれ、誰もそれが何であるかを推測できない場合は、確かに「読める」資格はありません。

ところで、周辺の引用を参照してください$VAR変数の置換には常に二重引用符を使用してください。、引用符を省略しなければならない理由と、そうすることが安全な理由を知らない場合。 (中に引用符を入れる必要はありませんが[[ … ]]、中には引用符を入れる必要があります[ … ]。)

evalコマンドをグループ化する狡猾な方法ですが、使用するのは簡単ではありません。

別のコマンドから出力を生成するもう1つの方法は、コマンド置換で実行することです。今回も読めません。

[ "$VAR" ] || exit 1$(echo "error message" >&2)

特定の形式のグループ化構成(中括弧または//または/ if/thenfiwhiledodone

おすすめ記事