【问题标题】:Bash compare command to string [duplicate]Bash比较命令到字符串[重复]
【发布时间】:2021-03-09 08:45:51
【问题描述】:

我想运行一个命令并将命令产生的结果与另一个值进行比较,然后回显 0 或 1。

例如(在伪代码中)类似于以下内容的内容:

if ($(app --version) == "1.2.3") then echo 1" else echo "0"

最好抑制来自 app --version 的实际命令输出,以便仅将 0 或 1 写入标准输出,具体取决于结果。

如何用 bash 做到这一点?有没有一个快速的班轮?

【问题讨论】:

  • 到目前为止你尝试过什么?你被困在哪里了?
  • @NicoHaase 我尝试了类似$(app --version) -eq "1.2.3" && echo "0" || echo "1" 的方法,但这会导致版本被解释为命令。输出也没有受到抑制。我不熟悉 bash 脚本语法。我猜想为了抑制命令的输出,可以通过管道传输到 /dev/null ..?但首先我必须得到实际的比较才能工作
  • 把cmd的结果放在双引号和括号里。例如[ "$(app --version)" == "1.2.3" ] && echo 1 || echo 0
  • @MilanDufek 这导致= not found
  • 是否真的支持 --version 标志?

标签: bash shell command-line


【解决方案1】:

这些有用吗?

$ if [ "$(<path>/app --version)" = "1.2.3" ]; then echo 0; else echo 1; fi
0
$ [ "$(<path>/app --version)" = "1.2.3" ] && echo 0 || echo 1
0

【讨论】:

  • 不,很遗憾没有。我仍然遇到我在 cmets 中描述的相同错误:i.imgur.com/LxTVIXo.png 编辑:直接在 bash 中运行它可以使其工作。奇怪,不知道为什么它在 zsh 中不起作用。
  • 我不知道您使用的是zsh== 不是标准的,POSIX 方式是=,在上面的比较中进行更改,它应该也可以在zsh 中使用
  • @n00b.exe :您要求 bash 解决方案,因此您得到了 bash 解决方案。如果您想要 zsh、FORTRAN 或其他任何内容,请在您的问题中指定。
  • @user1934428 是的,我应该说得更清楚。
【解决方案2】:
if [[ $(app --version) == 1.2.3 ]]
then
  echo 0
else
  echo 1
fi

可以在 bash 中工作(以及在 zsh 和 ksh 中,以防这很重要)。

【讨论】:

    猜你喜欢
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2012-03-02
    • 2018-09-23
    • 2023-02-15
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多