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
Здесь (( ... ))
условное вычисление используется для проверки того, является ли числовое выражение внутри него ненулевым.