On Fri, Dec 13, 2024 at 07:56:08AM +0300, Michael Tokarev via Postfix-users 
wrote:

> And second, the usage of "expr" utility is wrong, as it does
> not work when the system release is 0.something.  Consider:
> 
>   expr 0.foo : '\([0-9]*\)'

This is a counter-intuitive oddity of the expr(1) regexp (":" operator):

    -- Fedora:
    $ echo $(expr 0 : '\([0-9]*\)'; echo $?)
    0 1

    $ echo $(expr 1 : '\([1-9]*\)'; echo $?)
    1 0

    -- NetBSD:
    $ echo $(expr 0 : '\([0-9]*\)'; echo $?)
    0 1
    $ echo $(expr 1 : '\([1-9]*\)'; echo $?)
    1 0

The usual X-prefix approach can save the day:

    $ for input in 0 00 01 10 11 foo
      do
          num=$(expr "X${input}" : '\(X[0-9][0-9]*\)')
          printf "%s -> '%s' (%d)\n" "$input" "$num" "$?"
      done
    0 -> 'X0' (0)
    00 -> 'X00' (0)
    01 -> 'X01' (0)
    10 -> 'X10' (0)
    11 -> 'X11' (0)
    foo -> '' (1)

-- 
    Viktor.
_______________________________________________
Postfix-users mailing list -- postfix-users@postfix.org
To unsubscribe send an email to postfix-users-le...@postfix.org

Reply via email to