Bash

POSIX 浮動比較

  • March 28, 2020

使用舊系統,這裡我連接 sqlplus 以將返回值儲存在一個變數中,它對我來說工作得很好,但是與浮點值比較的問題a numeric/floating comparison和返回值可能是 0.052 或 0.0032 或整數值,到目前為止據我所知,Bash 不支持浮點比較,在 POSIX 中也不支持 bc

isubsCount=$( sqlplus -s user/pass <<-EOF
   set pagesize 0;
   set feedback off;
   set verify off;
   set heading off echo off;
   select  to_char((Max(start_time_timestamp+ (2/24))- p.port_statusmoddat), 999.999) Diff
   from  test
   exit;
EOF )


if [ ${isubsCount%.*} -ge 1 ]; then

echo yes

fi

我也試過這個,但它不起作用,:

if (( $(echo "$isubsCount >= 1" |bc -l) )); then

echo yes

fi

這將在所有 UNIX 機器上的任何 shell 中使用任何 awk 工作:

$ isubsCount=0.052
$ awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'
$ echo $?
1
$ if awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'; then echo "yes"; else echo "no"; fi
no

$ isubsCount=1
$ awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'
$ echo $?
0
$ if awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'; then echo "yes"; else echo "no"; fi
yes

顯然,您可以將退出語句從更改exit !(val >= 1)exit (val < 1)以獲得相同的結果,但我編寫它只是為了展示您如何獲得所需的退出狀態,而無需編寫與您實際想要測試的條件相反的條件。

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