Используйте подоболочку. Выполните команды в подоболочке и направьте вывод в свою программу.
(cat a; echo; cat b; tail -n+2 c) | ./myProgram
В соответствии со стандартом POSIX для bc:
В отличие от всех других операторов, реляционные операторы ( '<', '>', "<=", "> =", "==", "!=" ) допустимы только как объект оператора if, while или внутри оператора for.
По-видимому, это расширение GNU/Linux, позволяющее голым сравнениям оценивать истинность или ложность.
Вместо того, чтобы проверять вывод bc на 1 или 0, просто используйте test
напрямую:
if [ 5.3 -ge 5.3 ]; then echo hi; else echo bye; fi
или используйте арифметическое расширение (ksh93):
if (( 5.3 >= 5.3 )); then echo hi; else echo bye; fi
или используйте awk:
if awk -v x=5.3 -v y=5.3 'BEGIN { exit (x >= y) ? 0 : 1 }'; then echo hi; else echo bye; fi
Вы также можете проверить значения следующим образом:
$ fat=5.3
$ slim=5.3
$ echo $fat'>'$slim | bc -l
0
$ echo $fat'>'$slim | bc -l
0
$ echo $fat'=='$slim |bc -l
1
Выход:0
= ложь и 1
= истина
Вы можете использовать утилиту dc
для выполнения math
в оболочке. Команда будет печатать от hi
до stdout
, когда $n1 >= $n2, в противном случае будет отображаться bye
.
n1=5.3 n2=5.3
dc -e "[[hi]]sa [r]sb $n1 $n2 !>a [bye] z2=bp"
$n1 $n2 o/p
1. 5.3, 5.3 => hi
2. 5.3, 5.2 => hi
3. 5.3, 5.4 => bye