strange shell behavior...thoughts?

Gordon Messmer yinyang at eburg.com
Wed Sep 17 05:09:35 UTC 2008


Kevin Martin wrote:
> 
>> | sh-3.2$ /bin/ksh -c " set -xv  ; grep ABCD  b ; echo $? ; if [ "$?" =
>> | "0" ] ; then echo yes ; fi"
> 
> What I've been seeing is if I try to pass the
> "/bin/ksh -c "if...."" script the $? of the grep never seems to be 0 for
> some reason so I essentially get the results that I showed in my example
> where I was doing the dumb "unset $?" (making, at that point, $? = 1). 
> I agree that the "if some_command" would be a much better way of doing
> this but I get the same results if I do that as I do if I do the
> "some_command" the "if [ $? = 0 ]" test.  From reading the man page for
> ksh I may be running into a POSIX vs non-POSIX issue.

Can you share what you see when you use the "if some_command" form?

$ /bin/ksh -c 'grep ABCD b ; if [ "$?" = "0" ] ; then echo yes ; fi'

$ /bin/ksh -c 'grep ABCD b && echo yes'

$ /bin/ksh -c 'if grep ABCD b ; then echo yes ; fi'

All of the above forms work here when I test them.

Your original test has two flaws:
1) You're not quoting the $ sign properly, so $? gets expanded by your 
shell, before being passed as an argument to ksh.
2) "echo" would set a new value for $? if you did quote it properly, so 
that the value will always be 0 in the "if" test.  (which Cameron 
pointed out, and I completely ignored. ;)

It's not a POSIX issue.




More information about the fedora-list mailing list