【问题标题】:Shell Script "|| { }" Readable AlternativeShell 脚本 "|| { }" 可读替代
【发布时间】:2012-01-07 03:55:27
【问题描述】:

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

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

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

【问题讨论】:

  • 您能否更清楚地了解您想要检查的内容/方式?您想查看 $PATH 中是否有二进制文件/名称吗?您想查看系统中是否安装了特定的 rpm/dpkg?请多解释一下。
  • 我想检查$PATH上的二进制文件/名称
  • 知道了。那么下面提到的hash 是一种选择,which 是另一种选择。 :) 我同意其他人的观点,代码很好,只需要理解它并在此处和那里添加一些换行符以使其更有意义。您可以根据自己的需要将其剥离很多。

标签: bash syntax shell


【解决方案1】:

可读性是非常主观的。我特别认为原文非常可读,一旦你知道|| 意味着短路OR。因此,您将原文解读为“执行此操作,如果失败则执行此操作”。

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

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

【讨论】:

    【解决方案2】:

    对于习惯于 shell 脚本的任何人来说,这都是完全可读的,因为它是一个习惯用法。可读性的唯一障碍是缺少换行符:

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

    【讨论】:

    • 在这里两年了还没有使用任何大写字母?! :(
    • 这种情况已经很久了。
    • 很抱歉听到这个消息。也许你可以不遗余力地在这里使用大写。
    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2011-12-07
    相关资源
    最近更新 更多