Compare

num_compare

Compare two integers. Mirrors the convention used in numbers/version_compare.sh: exit 0 = equal, exit 1 = first greater, exit 2 = first less. This makes it easy to use in case statements alongside version_compare.

Example

num_compare 5 3; echo $?    # => 1  (5 > 3)
num_compare 3 5; echo $?    # => 2  (3 < 5)
num_compare 4 4; echo $?    # => 0  (equal)

Arguments

  • $1 (int): First integer
  • $2 (int): Second integer

Exit codes

  • 0: Equal; 1 First > second; 2 First < second

num_compare_float

Compare two floating-point numbers using awk (no bc dependency). Returns the same exit code convention as num_compare.

Example

num_compare_float 3.14 2.72; echo $?    # => 1
num_compare_float 1.0  1.0;  echo $?    # => 0

Arguments

  • $1 (float): First number
  • $2 (float): Second number

Exit codes

  • 0: Equal; 1 First > second; 2 First < second

numbers_version_compare

Compare two dot-separated version numbers.

Example

numbers_version_compare "2.1.0" "2.0.9"  # => exit 1 (A > B)
numbers_version_compare "1.0" "1.0.0"    # => exit 0 (equal)
numbers_version_compare "1.0" "2.0"      # => exit 2 (A < B)

Arguments

  • $1 (string): Version A (e.g. "2.1.0")
  • $2 (string): Version B (e.g. "2.0.9")

Exit codes

  • 0: A == B
  • 1: A > B
  • 2: A < B
  • 3: Missing arguments
  • 4: Invalid format (non-numeric segments)

semver_to_int

Convert a semantic version string to a zero-padded integer for numeric comparison. Strips non-numeric/non-dot characters, then formats as MMMMNNPP (major, 2-digit minor, 2-digit patch).

Example

semver_to_int "1.0.2k-fips"   # => 10002
semver_to_int "2.31.0"        # => 23100

Arguments

  • $1 (string): Version string (e.g. "1.0.2k-fips" or "openssl 1.0.2")

Exit codes

  • 0: Always

Output on stdout

  • Integer representation of the version