Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 27 Jun 2010 11:20:15 +0400
From:      Anonymous <swell.k@gmail.com>
To:        Giorgos Keramidas <keramida@ceid.upatras.gr>
Cc:        RW <rwmaillists@googlemail.com>, freebsd-questions@freebsd.org, Thomas Keusch <fwd@bsd-solutions-duesseldorf.de>
Subject:   Re: .sh  check for numeric content
Message-ID:  <86mxuhuekw.fsf@gmail.com>
In-Reply-To: <87fx0dvwfd.fsf@kobe.laptop> (Giorgos Keramidas's message of "Thu, 24 Jun 2010 08:20:22 %2B0300")
References:  <4C22B3D7.6070102@comclark.com> <20100624013755.GA5009@gothschlampen.com> <20100624034434.7a6c2895@gumby.homeunix.com> <20100624031953.GA21766@gothschlampen.com> <87fx0dvwfd.fsf@kobe.laptop>

next in thread | previous in thread | raw e-mail | index | archive | help
Giorgos Keramidas <keramida@ceid.upatras.gr> writes:

> On Thu, 24 Jun 2010 05:19:53 +0200, Thomas Keusch <fwd@bsd-solutions-duesseldorf.de> wrote:
>> tk@eternity:~$ b=5
>> tk@eternity:~$ case "$b" in
>>> [0-9] )
>>>         echo numeric
>>>         ;;
>>> * )
>>>         echo alpha
>>>         ;;
>>> esac
>> numeric
>> tk@eternity:~$
>>
>> Works for me.
>
> Depending on what "numeric" means, this may be ok.  For other numeric
> values (e.g. floating point numbers) There are simple, fast and correct
> ways to check but you have to escape from the shell, e.g.:
>
>     $ var=3.1415926535897931
>     $ python -c "$var + 0.0" >/dev/null 2>&1 ; echo $?
>     0

      $ printf %g $var 2>&- >&- ; echo $?
      0

>
>     $ var=3a.1415926535897931
>     $ python -c "$var + 0.0" >/dev/null 2>&1 ; echo $?
>     1

      $ printf %g $var 2>&- >&- ; echo $?
      1

It also understands %e and %a -notation, e.g. 3.14e+2 and 0x1.3ap+8.

      $ python -c 0x1.3ap+8 2>&- >&- ; echo $?
      1
      $ printf %g 0x1.3ap+8 2>&- >&- ; echo $?
      0

>
> The overhead of spawning a full-blown language interpreter like Perl or
> Python may be acceptable if you have to check "a few" values.  Then it
> may be overkill if you want to check a million values.  It's really up
> to you, as a programmer, to pick the right method.

Besides, printf(1) is also builtin in some shells which can reduce
overhead of spawning process. IIRC, there is some support for builtin
printf in our /bin/sh but it's disabled.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86mxuhuekw.fsf>