if/then/elseのベストプラクティスは何ですか? (読みやすくなるため)次の形式を使用する傾向があります。
#!/usr/bin/ksh
#
[[ -f /path/to/target/file ]] && {
echo "File exists"
} || {
echo "No such file"
}
この形式ではなく
#!/usr/bin/ksh
#
if [ -f /path/to/target/file ] ; then
echo "File exists"
else
echo "No such file"
fi
また、「else」部分が実行されないように、複雑なブロックのtrue
前にステートメントを追加しました。} || {
どんな提案がありますか?
ベストアンサー1
このスタイルの問題は、2つの形式が同じではないことです。あなたが使用するとき:
if command; then
foo
else
bar
fi
これは呼び出されたり同時に呼び出されたりしませんfoo
。と両方bar
を使用している場合は、2つのパスを使用できます。&&
||
$ [[ -d / ]] && {
> echo "Path 1 taken"
> false
> } || {
> echo "Path 2 taken"
> }
Path 1 taken
Path 2 taken
$
フォームを使用する場合、if cmd; then foo; else bar; fi
呼び出し条件はfalseを返すことです。フォームを使用する場合、呼び出し条件はfalseを返すことです。bar
cmd
cmd && foo || bar
bar
cmd && foo
true
編集:あなたの質問であなたのバージョンが機能するためにブロックの最後に置く必要があることを認めたことがわかりました。これを行うことに興味がある場合は、他の主な問題はわかりません。しかし、可能であれば、スタイルの前にブロックの最後のコマンドとして無条件に「true」を追加する必要があるようです。コマンドが失敗する可能性があります。これは保証するためだけです。最終的には忘れてしまい、そうでないまですべてが正常に動作しているように見えます。