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