bug-bash
[Top][All Lists]
Advanced

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

Re: status on $[arith] for eval arith vsl $((arith))??


From: Linda Walsh
Subject: Re: status on $[arith] for eval arith vsl $((arith))??
Date: Wed, 11 Apr 2012 02:34:01 -0700
User-agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.24) Gecko/20100228 Lightning/0.9 Thunderbird/2.0.0.24 Mnenhy/0.7.6.666



Chet Ramey wrote:

On 4/9/12 9:07 PM, Linda Walsh wrote:

** linux-kernel -- all over the place...

At that point, I was getting too many to keep up with ... so I stopped
searching...

$[] has is -- I would bet, Universally, used MORE than $(())...

I believe you'd lose, but it's unprovable either way.  Consider the fact,
though, that bash and zsh support $[...], ksh93 and dash support only
$((...)), but that all four support $((...)).

----

Well, I think you are probably right -- looks like alot of newer more
bash-specific, and 'clever' code uses (())...  but it isn't easy on the eyes...


But the examples of use of $(()) are leaning far more toward the perverse side
than simple use of $[]...

Maybe lisp programmers prefer (())??

a few examples:


- options="$(expr "${options}" : "\(.\{$((${last_option_index}-1))\}\)")"
- YESTERDAY=$(date -r $((`date +%s` - 86400 )) +%d/%m/%Y
- PREGAP=$(($(echo $OFFSETS | cut -f1 -d' ')))

- for ((vl=$((v_level - 1)); $vl > 0; --vl))

Using [] in expressions provides a distinct visual feature that is
different from the content....   There's no unclarity in confusing it
with $(xxx) $((xxx)) if xxx is a var and a function, which did they mean?

You don't hae that issue with $[], as to confuse it with an array, you'd
have to leave off the array name and the curly brackets...
======================================================================
Maarten Billemont wrote:

> (Don't give

>  me the spiel about how [...] is already arithmetic evaluation
> inside array indices, that's a different syntax  entirely,

How is that?  I thought it WAS the syntax.

${xxx[yyy]}  => remove the array base, and you just get a calculated
offset as a result

=> $[yyy]...

It is similar to C in that regard.   You can put [xxx] after an ID, and it
means it is an array # of items past the array's start.  but if the array was
missing.  (well besides the syntax errors), it would just be the offset.



>>> BTW, in case there is any doubt, I am not pushing for removal of $(()), or a change of the status quo, but I am taking issue with the idea of removing $[],
as some proposed...




Chet -- you should get back to the posix folks and tell them posix is to be
'descriptive of usage' (their words), not prescriptive.   Just because ksh
did it differently from everyone else's usage doesn't mean they should go
with that syntax...

You have got to be kidding.  Don't you realize you're talking about
decisions that are nearly 20 years old?  That $[...] was a Posix
invention that only ever appeared in P1003.2d9?  That the $((...))
syntax was adopted officially for P1003.2-1992?  That's 1992.  Twenty
years ago.

====


Now, it's hardly any problem to keep dragging the $[...] syntax along.
It takes only a few dozen bytes of code.  I have no plans to remove it.
But let's not kid ourselves: it's revisionist history to think that
$[...] was widespread before Posix so callously stamped it out.

----
        I've seen it more often in portable code than the $(()) -- but I
could be remembering it more because it stands out too...



Geez.

Indeed.



        Indubitably.
:-)




reply via email to

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