【问题标题】:bash -bc curl comparing variablesbash -bc curl 比较变量
【发布时间】:2015-10-13 19:37:59
【问题描述】:

相当简单的脚本,但我遇到了问题。它不会比较两个变量,这是由于浮点数还是?我尝试使用 | bc 但仍然无法正常工作...

    #!/bin/bash

    x=$(curl -o /dev/null -s -w %{time_total}\\n  http://www.google.com) | bc
    y=.5 | bc

    if [[ $x -gt $y ]]; then 
        echo “fast”
    else
        echo “not as fast”
    fi

将代码更新为: #!/bin/bash

    x=$(curl -o /dev/null -s -w %{time_total}\\n  http://www.google.com)
    y=.5

    if (( $(bc <<<'$x > $y') )); then
        echo “fast”
    else
        echo “not as fast”
    fi

接收错误: (standard_in) 1:非法字符:$ (standard_in) 1:非法字符:$ “没那么快”

【问题讨论】:

  • 顺便说一句:请不要养成在回答完问题后更改问题的习惯。这只是让后来来的人感到困惑。如果答案对您有用,请接受;如果没有,请添加评论(如您所做的那样)或忽略它。

标签: bash comparison-operators bc


【解决方案1】:

cmd | bc 表示“将 cmd 的输出重定向到实用程序 bc。它不是用于声明数字的晦涩的 shell 语法。

例如,

y=.5 | bc

执行命令y=.5(它将一个名为y的局部变量设置为字符串.5),它不产生任何输出,然后将其输入bc。因为bc 没有接收到输入,所以它不会产生输出。此外,变量y会在左侧命令终止时消失。

同样,

x=$(curl ...) | bc

将名为 x 的局部变量设置为curl 命令的输出(使用命令替换语法)。同样,赋值没有产生输出,bc 没有接收到输入,因此什么也不做,x 变量消失了。

如果您从两个分配中删除|bc,那么您至少会设法设置xy。然后您可以使用bc 来比较浮点值:

if (( $(bc <<<"$x > $y") )); then

这里使用(( ... ))条件计算来测试其中的数值表达式是否非零。

【讨论】:

  • 感谢@rici 的深入回答。但是我仍然看到错误:(standard_in)1:非法字符:$(standard_in)1:非法字符:$“不那么快”
  • @user3460432:糟糕。我在此处的字符串中放了错误的引号;使用单引号不会发生变量替换。已修复,抱歉。
  • 使用这个: if (( $(bc $y”) ));然后 - 我仍然看到错误:(standard_in)1:非法字符:^“(standard_in)1:非法字符:^?(standard_in)1:非法字符:^?“没有那么快”
  • @user3460432:不要使用文字处理器来编辑脚本文件。您有一个印刷报价,而不是开头的"。仔细看看。
  • 我明白了,是错误的 "" texteditor 将它们更改为倾斜的
猜你喜欢
  • 1970-01-01
  • 2018-09-23
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 2018-03-17
  • 2015-11-09
相关资源
最近更新 更多