Date: Tue, 18 Feb 2003 18:01:20 +0200 From: Enache Adrian <enache@rdslink.ro> To: Poul-Henning Kamp <phk@phk.freebsd.dk> Cc: current@freebsd.org Subject: Re: Shell programming 101: Is this an expr(1) bug ? Message-ID: <20030218160120.GA859@ratsnest.hole> In-Reply-To: <57374.1045568362@critter.freebsd.dk> References: <57374.1045568362@critter.freebsd.dk>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Feb 18, 2003 at 12:39:22PM +0100, Poul-Henning Kamp wrote:
>
>
> Running:
>
> #!/bin/sh
> set -ex
>
> for p in ad2 ad0 ad1
> do
> a0=`expr $p : '^ad\([0-9]\)$'`
> done
>
> I get:
>
> syv# sh _
> + expr ad2 : ^ad\([0-9]\)$
> + a0=2
> + expr ad0 : ^ad\([0-9]\)$
> + a0=0
> syv# echo $?
> 1
> syv#
>
> That looks like a bug to me...
Confusing but documented behaviour:
1. expr ad0 : ad\([0-9]\) => expr 0
man expr
If the match succeeds and the pattern contains at least one regu-
lar expression subexpression ``\(...\)'', the string correspond-
ing to ``\1'' is returned; otherwise the matching operator
2. `expr 0` => exit status = 1
man expr
The expr utility exits with one of the following values:
0 the expression is neither an empty string nor 0.
1 the expression is an empty string or 0.
This behaviour is the same on linux, *BSD and probably other
systems too.
Regards
Adi
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030218160120.GA859>
