理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

条件分岐での複文実行

オシャレかどうかは個人の趣向によるのだけれど、あんまし大した条件分岐でもないのに if/else 文を書くというのは行き過ぎだろと思うときが結構ある。こういうときは短絡評価させる、みたいな方が分かりやすくて良いかなと思っていた。

単純な例を書く。

# ファイルがあるときだけコピーを実行
[ -f file1 ] && cp -p file1 file2

ところが、条件によって複合文を実行させたいみたいなときがあって、こういうときは if/else に頼るみたいなことがあった。
たとえば、ファイルがあったときにその旨を表示させてコピーを実行しようと思うと、

[ -f file1 ] && echo "file1 exists" && cp -p file1 file2

なんて書き方は可能だけれど、節操無く短絡評価に頼ると前段コマンドが失敗したときに痛い目を見そう。というわけで、if 文に頼る。

if [ -f file1 ]; then
    echo "file1 exists."
    cp -p file1 file2
fi

これとは別にグループコマンドを使うとオシャレ感がグンと増してガイアも呼んでる感じがしたのだけれど、やはり人には好みがあるので、あまり同意されなかった。

[ -f file1 ] && {
    echo "file1 exists" 
    cp -p file1 file2
}

保守性考えたら、確かに if/else つかったほうが良いだろうなと素直に思った。