On 14Sep2008 23:50, Kevin Martin <kevintm@xxxxxxxxxxxxx> wrote: | So I'm fairly confused at this point. | | Start with a /bin/sh shell. | | Then do: | | sh-3.2$ unset $? | sh: unset: `0': not a valid identifier | | ok, no problem; then do | | sh-3.2$ /bin/ksh -c " set -xv ; grep ABCD b ; echo $? ; if [ "$?" = | "0" ] ; then echo yes ; fi" You know you need to escape " inside ", yes? As it happens it has no effect in your script here, but ... | + grep ABCD b | ABCD="C" ; export ABCD | + echo 1 | 1 | + [ 1 = 0 ] | | WHAT? The "echo" command has a return status, and trashes your $?. | Then do it again without unsetting $?: You don't ever unset $?. It is not a meaningful idea. If you want a particular $?, do this: grep ABCD b xit=$? echo $xit # overwrites $?, but $xit is untouched if [ $xit = 0 ] then ... but almost invariably when someone does: some_command ... if [ $? = 0 ] then they would be MUCH better off just going: if some_command ... then Remember that the predicate in an if/while if a command_list, and the exit status of the last command in the command_list is what is tested. The command "[" (aka "test") is just another command suited to simple Boolean tests. But it is not "special". Example: # repeat prompt until EOF or empty reply while echo "Enter something:" read foo && [ -n "$foo" ] do echo "foo=$foo" done | [...snip...] Is this a ksh bug? No. Cheers, -- Cameron Simpson <cs@xxxxxxxxxx> DoD#743 http://www.cskk.ezoshosting.com/cs/ The first ninety percent of the task takes ninety percent of the time, and the last ten percent takes the other ninety percent. -- fedora-list mailing list fedora-list@xxxxxxxxxx To unsubscribe: https://www.redhat.com/mailman/listinfo/fedora-list Guidelines: http://fedoraproject.org/wiki/Communicate/MailingListGuidelines