Function: max

Find the element with the highest value (text or numeric)

USAGE: max arrayname

max()
{    
  local arrayname=${1:?Array name required} varname=${2:-var}
  local IFS= string max e
  

Copy the array, $arrayname, to local array

  eval "array=( \"\${$arrayname[@]}\" )"
  eval "string=\"\${$arrayname[*]}\""
  case $string in
    *[!0-9]*)
       

Array contains non-numeric value, so use string comparison

       for e in "${array[@]}"
       do
         [ "$e" \> "$max" ] && max=$e
       done
       ;;
    *) max=${array[0]}
       for e in "${array[@]}"
       do
         

Numeric comparison

         [ "$e" -gt "$max" ] && max=$e
       done
       ;;
  esac
  eval "$varname=\$max"
}