KSH - バイアンプ(&&)とツインチューブ(||)を使用するif/then/else

KSH - バイアンプ(&&)とツインチューブ(||)を使用するif/then/else

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を返すことです。barcmdcmd && foo || barbarcmd && foo

true編集:あなたの質問であなたのバージョンが機能するためにブロックの最後に置く必要があることを認めたことがわかりました。これを行うことに興味がある場合は、他の主な問題はわかりません。しかし、可能であれば、スタイルの前にブロックの最後のコマンドとして無条件に「true」を追加する必要があるようです。コマンドが失敗する可能性があります。これは保証するためだけです。最終的には忘れてしまい、そうでないまですべてが正常に動作しているように見えます。

おすすめ記事