[Toybox] Would someone please explain what bash is doing here?

Chet Ramey chet.ramey at case.edu
Tue Mar 10 08:42:56 PDT 2020


On 3/9/20 11:16 PM, Rob Landley wrote:

> Oh I imagine just about everything sees use.
> 
>   $ echo $((2**3))
>   8
>   $ echo $((2**3.4))
>   bash: 2**3.4: syntax error: invalid arithmetic operator (error token is ".4")

Yeah, bash doesn't do any floating point at all. Use awk or bc.


> I have not yet opened the $(( )) and for ((;;)) cans of worms yet. I eventually
> figured out that (( )) on the command line is because you can assign values to
> variables, so you can do:
> 
>   $ ((x++)); echo $x
>   1

Not so much. It's more so you can do C-like things like

	while ((i > 0)) ; do
		something that may or may not include i
	done

without using test. It's basically $(( )) with a return value you can use
(or, more precisely, $(( )) is (( )) converted to a word expansion).

The arithmetic for loop is just syntactic sugar. I don't know if I'd do it
again.


>> -- but i can't even imagine a world in
>> which someone comes to me asking for more *dash* compatibility :-)
> 
> It was a mistake Ubuntu made and pushed "upstream" into debian. The goal was
> never "remove everything that's not in posix", that was just a side effect. 

Minimalism and POSIX conformance are the big selling points now, at least
on the shell side of things.

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
		 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    chet at case.edu    http://tiswww.cwru.edu/~chet/


More information about the Toybox mailing list