more than 2^31 bytes are displayed as negative value.
Because ksh can handle integer range of -2^31 ... 2^31-1
On ksh, this is like this;
$ echo $((2147483647)) # 2^31-1 2147483647 $ echo $((2147483647+1)) # 2^31 -2147483648
Here's a concept code to check two strings representing big non-negative integer values.
#!/bin/ksh function isgreater { # check presence of arguments # [ $# -lt 2 ] && return -- -1 x=$1 y=$2 # Are arguments both form of positive integer? # # !!! INCOMPLETE: not checking correct pattern!!! # case "XX${x}YY${y}ZZ" in XX[0-9]*YY[0-9]*ZZ) : # ok, do nothing ;; *) return -- -2 # ng, string is not positive integer ;; esac # Compare it # if [ ${#x} -gt ${#y} ]; then return 0 elif [ ${#x} -eq ${#y} ]; then if [ $x -gt $y ]; then return 0 else return 1 fi else return 1 fi } isgreater $1 $2 case $? in 0) echo $1 is greater than $2. ;; 1) echo $1 is NOT greater than $2. ;; *) echo argument format error ;; esac
Note