Having defined a function _F to return a non-zero return status :
$ function _F () { return 255; }
I'd expect to be able to test this return status in an if clause - but
this is what happens:
$ if ! _F ; then echo '_F returned: '$?; fi
_F returned: 0
whereas if I just run F inline, the return status is available:
$ _F; echo $?
255
Interestingly, if I don't use '!' in the conditional, I can access the
the return status:
$ if _F ; then echo OK; else echo '_F returned: '$?; fi
_F returned: 255
This is with bash:
$ bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
...
from an up-to-date copy of "Scientific Linux release 6.5" for X86_64 .
This behavior seems to me to be an instant source of confusion and bugs -
does anyone agree with me that this is a bug ?
Is this really mandated by the standards ?
Is there some other variable I could test to retrieve $? if it has
been mangled by a '!'
in the conditional ?
Is there any other conclusion than : "if you want to access the return
status of a
function in an if clause , don't use '!' in the conditional" ?
Any responses / suggestions gratefully received.
Thanks & Regards,
Jason