if else ステートメントは論理および&&または||どのような点で他のものよりも優先すべきですか?

if else ステートメントは論理および&&または||どのような点で他のものよりも優先すべきですか?

意思決定構造について学んでいますが、次のコードを見つけました。

if [ -f ./myfile ]
then
     cat ./myfile
else
     cat /home/user/myfile
fi


[ -f ./myfile ] &&
cat ./myfile ||
cat /home/user/myfile

どちらも同じように振る舞います。ある方法を他の方法よりも使用すると、どのような利点がありますか?

ベストアンサー1

ほとんどの人はフォーマットを理解する方が簡単だと思いますifthenelsefi

の場合はtrueが返されることをa && b || c確認する必要があります。bこれは微妙なエラーの原因であり、このスタイルを避けるべき理由です。b が true を返さない場合、同じではありません。

 $ if true; then false ; else echo boom ; fi
 $ true && false || echo boom
 boom

長さが短くなることは、非常に短いテストとelse句のない作業に適しています。

 die(){ printf "%s: %s\n" "$0" "$*" >&2 ; exit 1; }

 [ "$#" -eq 2] || die "Needs 2 arguments, input and output"

 if [ "$#" -ne 2 ] ; then
     die "Needs 2 arguments, input and output"
 fi

&&そして||そうです。short circuiting operators結果がわかったら、不要な追加テストはスキップされます。a && b || cにグループ化されます(a && b) || c。終了ステータス0を返さないように定義されている場合afailsグループは既知のものであるため、実行する必要はありません。式の結果がわからないため、実行が必要です。成功すると(0を返す)、演算子はまだ結果がわからないため、調べるために実行する必要があります。成功すれば成功し、結果全体が成功したことが知られているので、実行する必要はありません。失敗すると、式の値がまだわからないため、実行する必要があります。(a && b)failb||ca&&a && bbba && b||cb||c

おすすめ記事