bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Another new 4.0 feature? functions can't return '1', (()) can't eval


From: Chet Ramey
Subject: Re: Another new 4.0 feature? functions can't return '1', (()) can't eval to 0?
Date: Tue, 09 Aug 2011 21:08:33 -0400
User-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.18) Gecko/20110616 Lightning/1.0b2 Thunderbird/3.1.11

On 8/9/11 8:10 PM, Linda Walsh wrote:

>> The change to make (( honor the `errexit' option came in with bash-4.1,
>> part of the cleanup after the Posix changes to the specification of the
>> behavior of `set -e'.  Most of the other changes in this area came in
>> with bash-4.0.
> ----
>     I thought (()) was a bash extension?

It is.  That's not a reason to make `set -e' apply non-uniformly.

> 
>     If so, why shoe-horn it into a 20y/o spec**?  It's often used for
> doing calculations -- that's why it was added... it can only be used
> where a command can be used, so having it die whenever it evals to 0 -- just
> doesn't make sense.  If there's an error in the calculation, like division
> by zero, sure, but just because I come up with a result of 0, == it's a far
> stretch to think that would be an error.

There are ways around this, if it's an issue.

> Did you get bitten by some POSIX virus?

That didn't end up being nearly as funny as you probably thought it
was going to be.


>> Posix changed set -e to cause the shell to exit when any command fails,
>> not just when simple commands fail, as in versions of the standard up
>> to and including Posix.1-2008.
> ---
> (()) isn't a command, it's a calculation (how's that for different
> justification?)

Creative, but it's a command.

>>> 2)  a function returning a false value  -- Tried putting the ((expr)) in
>>> an if:
>>>
>>> if ((expr)); then return 0; else return 1;
>>>
>>> As soon as it sees the return 1, it exits, -- as I returned 'false'
>>> (error).
> ----
>     It was followed by an &&, has that changed too?

It's impossible to say what the problem, if any, might have been.

For instance, the following script displays `after':

set -e
func()
{
        if (( 0 )); then return 0; else return 1; fi
}

func && echo a
echo after

> ** -- wait, I thought posix was dead ages ago....there are updates? 2008? 
> is that
> the latest?   #*(@#$()@#)!@)*&%   they whole reason for the standard was so
> programs
> wouldn't keep breaking...and now they change the standards...

Maybe you should read it; you'll see that work is continuing.

http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

We're about to ballot on Technical Corrigendum 1 (TC1) to the 2008
version.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU    address@hidden    http://cnswww.cns.cwru.edu/~chet/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]