# HG changeset patch # User Franz Glasner # Date 1726657501 -7200 # Node ID fb7e5cd694943f9c6514e91a62260a512a59f637 # Parent dab62498e69caaccf1dc46354b4d3136bb2f749d farray.sh: implement _farr_is_decimal_number() to prepare for more thorough index checks diff -r dab62498e69c -r fb7e5cd69494 share/local-bsdtools/farray.sh --- a/share/local-bsdtools/farray.sh Wed Sep 18 03:21:55 2024 +0200 +++ b/share/local-bsdtools/farray.sh Wed Sep 18 13:05:01 2024 +0200 @@ -102,6 +102,45 @@ #: +#: Check whether given argument string is a decimal number string +#: +#: Args: +#: $1: The string to be checked +#: +#: Returns: +#: int: 0 (truish) if `$1` is a valid decimal number, +#: 1 (falsy) otherwise +#: +#: See Also: +#: https://mywiki.wooledge.org/BashFAQ/054 +#: +_farr_is_decimal_number() { + case "$1" in + '') + # empty is not allowed + return 1 + ;; + +|-) + # just the sign is not allowed + return 1 + ;; + *) + # FALL THROUGH + ;; + esac + # here we can trim the optional sign safely + case "${1#[-+]}" in + *[!0123456789]*) + return 1 + ;; + *) + return 0 + ;; + esac +} + + +#: #: Quote the given input using "Dollar-Single-Quotes" to be safely used in #: evals. #: diff -r dab62498e69c -r fb7e5cd69494 tests/farray-misc.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/farray-misc.t Wed Sep 18 13:05:01 2024 +0200 @@ -0,0 +1,50 @@ +Basic tests of farray.sh's internal helper functions + +Shell is /bin/sh. + + +Setup +===== + + $ set -u + $ . "${TESTDIR}/testsetup.sh" + $ _p_datadir="${TESTDIR}/../share/local-bsdtools" + $ . "${_p_datadir}/farray.sh" + + +Plain Decimal Number Checks +=========================== + +Valid +----- + + $ _farr_is_decimal_number 0 + $ _farr_is_decimal_number 12345678901234567890 + $ _farr_is_decimal_number -12345678901234567890 + $ _farr_is_decimal_number +12345678901234567890 + +Octal + + $ _farr_is_decimal_number 012345678901234567890 + $ _farr_is_decimal_number -012345678901234567890 + $ _farr_is_decimal_number +12345678901234567890 + +Invalid +------- + + $ _farr_is_decimal_number x + [1] + $ _farr_is_decimal_number '' + [1] + $ _farr_is_decimal_number '+' + [1] + $ _farr_is_decimal_number '-' + [1] + $ _farr_is_decimal_number '0x1' + [1] + $ _farr_is_decimal_number *12345678901234567890 + [1] + $ _farr_is_decimal_number 0x0123456789abcdef + [1] + $ _farr_is_decimal_number 0123456789abcdef + [1]