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 users
mailing list