Right, I have seen this very odd recursive behavior. It doesn't appear to
be documented, but one of the very first bugs filed against OSH mentions it:
In this case it's one the operands of [[ a -eq b ]]. Not only can 'a' be
a variable that contains a varaible name, etc. -- it can be an entire
In other words, it can be thought of as an implicit recursive 'eval' as
well. Basically bash tries as hard as it can to make things integers in
arithmetic contexts. It's even more aggressive than awk or Make, which
also work with integers-as-strings.
(I chose not to copy this behavior since "important" shell scripts don't
appear to rely on it.)
Post by Greg Wooledge
Post by Bruce Hohl
Are strings also evaluated to zero within $(( ))?
$ echo $pd
$ echo $((pd))
As Andy said, things that can be parsed as variable names are treated
as variable names in arithmetic contexts. What he didn't mention was
that bash does this *recursively* until it gets to an integer, or to
something that can't be parsed as either an integer or a variable name.
wooledg:~$ a=b b=c c=d d=e e=f f=42; echo $((a))