bash -bc curl, сравнивающий переменные

Довольно простой скрипт, но у меня возникли проблемы с ним. Он не будет сравнивать 2 переменные, это связано с плавающей запятой или? Я пытался использовать | но до сих пор не работает...

    #!/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: недопустимый символ: $ "не так быстро"

1 ответ

cmd | bc означает "перенаправить вывод cmd в утилиту bc, Это не скрытый синтаксис оболочки для объявления чисел.

Например,

y=.5 | bc

выполняет команду y=.5 (который устанавливает локальную переменную с именем y в строку .5), который не производит вывод, а затем передает его в bc, поскольку bc не получает никакого ввода, он не производит никакого вывода. Кроме того, переменная y исчезает, когда левая команда завершается.

Так же,

x=$(curl ...) | bc

устанавливает локальную переменную с именем x на выход curl команда (используя синтаксис подстановки команд). Опять же, присвоение не производит вывод, bc не получает никакого ввода и, следовательно, ничего не делает, и x переменная исчезает.

Если вы удалите |bc из обоих заданий, то вам, по крайней мере, удалось установить x а также y, Вы могли бы тогда использовать bc сравнить значения с плавающей запятой:

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

Здесь (( ... )) условное вычисление используется для проверки того, является ли числовое выражение внутри него ненулевым.

Другие вопросы по тегам