Bash

Unix命令在減法後返回兩個中的最大浮點值

  • June 28, 2016

這類似於關於獲取兩個數字的最小值/最大值的問題,但我有興趣對浮點數做同樣的事情。

所以基本上我正在嘗試使用三元運算符使用shell算術擴展,但它只適用於整數。

例如,我想取兩個數字並減去一些數字並檢查結果是否高於零,如果不是,則將其設置為高於零。

整數

這很好用:

value=5
echo $(( $(bc <<< "$value - 10") > 0 ? $(bc <<< "$value - 10") : 1 ))

1並按預期返回。

花車

但是,當我嘗試將其轉換為浮點比較時,它不起作用,例如

value=0.5
echo $(( $(bc <<< "$value - 0.8") > 0 ? $(bc <<< "$value - 0.8") : 0.1 ))

這給出了錯誤:

-bash: -.3 > 0 ? -.3 : 0.1 : syntax error: operand expected (error token is ".3 > 0 ? -.3 : 0.1 ")

儘管bc返回正確的浮點數:

$ echo $(bc <<< "$value - 0.8")
-.3

我假設 bash 無法處理這種浮點比較。

是否有任何簡單的解決方法來獲取浮點數的最​​小值/最大值(如上所述)?

好的,我想出了這個簡單的單行程式碼,通過bc比較值和 shell 來完成剩下的工作:

$ value=0.5
$ [ $(bc <<< "$value - 0.8 > 0") -eq 1 ] && echo $(bc <<< "$value - 0.8") || echo 0.1
0.1
$ [ $(bc <<< "$value - 0.2 > 0") -eq 1 ] && echo $(bc <<< "$value - 0.2") || echo 0.1
.3

或者使用bc它自己,例如

v=0.5
bc <<< "if ($v-0.8>0) $v-0.8 else 0.1" # Result: .1
bc <<< "if ($v-0.2>0) $v-0.2 else 0.1" # Result: .3

引用自:https://unix.stackexchange.com/questions/292553