Subject: Re: /bin/sh bug or not?
To: None <kstailey@leidecker.gsfc.nasa.gov>
From: Chet Ramey <chet@odin.INS.CWRU.Edu>
List: current-users
Date: 05/11/1995 10:37:28
> > Well, I have run across something else that looks suspicious in NetBSD
> > sh and I wanted to run it past you. Take the expression:
> >
> > i=`false`
> >
> > Under AIX ksh, this expression will set return code to 1.
> > Under SunOS sh, this expression will set return code to 255.
> > Under SunOS bash, this expression will set return code to 255.
Which version of bash? And which version of sh?
odin(2)$ i=`false`
odin(2)$ echo $?
1
odin(2)$ echo $BASH_VERSION
1.14.4(1)
odin(2)$ uname -a
SunOS odin 4.1.2 13 sun4m
odin(2)$ sh
${HOST}($SHLVL)\$ i=`false`
${HOST}($SHLVL)\$ echo $?
1
> > Under NetBSD sh, the expression will set the return code to 0 because
> > it treats variable assignment as one transaction and the execution
> > of the builtin function false as another transaction. As it turns out,
> > the variable assignment happens last so it's return value is what is
> > trapped and returned by the shell in $?.
>
> This still happens in -current as of Mon May 8. Does any standard
> mandate this behaviour?
According to Posix.2, the netbsd sh is wrong. Posix.2 says that any
command line that does not contain a command to be executed after
expansion should return the status of any command substitution
performed while expanding the command, or zero if no command
subsitution occurs.
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
Chet Ramey, Case Western Reserve University Internet: chet@po.CWRU.Edu