Shell脚本“|| {}”可读替代

时间:2012-01-07 03:55:27

标签: bash syntax shell

当我遇到包含此代码的this answer时,我正在寻找一种方法来检查是否使用Shell脚本安装了程序:

hash foo 2>&- || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }

但该代码不是(人类)可读的,该语法的替代方法是什么?

2 个答案:

答案 0 :(得分:9)

可读性非常主观。一旦你知道||意味着短路 OR ,我特别认为原件非常易读。所以你读原文是“做这个,这个,如果那个失败了。”

不使用||的等效代码是:

if ! hash foo 2>&-
then
    echo >&2 "I require foo but it's not installed.  Aborting."
    exit 1
fi

答案 1 :(得分:2)

对于习惯使用shell脚本的人来说,这是完全可读的,因为它是一个成语。可读性的唯一障碍是缺乏新行:

hash foo 2>&- || {
  echo >&2 "I require foo but it's not installed.  Aborting."
  exit 1
}