意思決定構造について学んでいますが、次のコードを見つけました。
if [ -f ./myfile ]
then
cat ./myfile
else
cat /home/user/myfile
fi
[ -f ./myfile ] &&
cat ./myfile ||
cat /home/user/myfile
どちらも同じように振る舞います。ある方法を他の方法よりも使用すると、どのような利点がありますか?
ベストアンサー1
ほとんどの人はフォーマットを理解する方が簡単だと思いますif
。then
else
fi
の場合は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を返さないように定義されている場合a
、fails
グループは既知のものであるため、実行する必要はありません。式の結果がわからないため、実行が必要です。成功すると(0を返す)、演算子はまだ結果がわからないため、調べるために実行する必要があります。成功すれば成功し、結果全体が成功したことが知られているので、実行する必要はありません。失敗すると、式の値がまだわからないため、実行する必要があります。(a && b)
fail
b
||
c
a
&&
a && b
b
b
a && b
||
c
b
||
c