Bash
Unix命令在減法後返回兩個中的最大浮點值
這類似於關於獲取兩個數字的最小值/最大值的問題,但我有興趣對浮點數做同樣的事情。
所以基本上我正在嘗試使用三元運算符使用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