¿De dónde viene la expansión de variables recursivas en contextos numéricos bash / shell?

Los estados de especificaciones POSIX con respecto aExpansión Aritmética ese

[i] f la variable de shell x contiene un valor que forma una constante entera válida, que incluye opcionalmente un signo más o menos inicial, luego las expansiones aritméticas "$ ((x))" y "$ (($ x))" devolver el mismo valor

Que es un atajo razonable y limpia expresiones complicadas bastante bien.

bash (versiones3.2.25(1)-release de CentOS 5 y4.3.33(1)-release de debian inestable) así como ksh (Version AJM 93t+ 2010-06-21 de CentOS 5) todos parecen ir un paso más allá que eso sin embargo.

Todos parecen expandir recursivamente las variables encontradas en la expansión aritmética (y los contextos numéricos en[[ resultante del uso de los operadores numéricos).

Específicamente:

$ set -x
$ bar=5
+ bar=5
$ foo=bar
+ foo=bar
$ [ foo -gt 4 ]; echo $?
+ '[' foo -gt 4 ']'
-bash: [: foo: integer expression expected
+ echo 2
2
$ [[ foo -gt 4 ]]; echo $?
+ [[ foo -gt 4 ]]
+ echo 0
0
$ [[ foo -eq 0 ]]; echo $?
+ [[ foo -eq 0 ]]
+ echo 1
1
$ [[ foo -eq 5 ]]; echo $?
+ [[ foo -eq 5 ]]
+ echo 0
0
$ (( foo == bar )); echo $?
+ ((  foo == bar  ))
+ echo 0
0
$ (( foo == 1 )); echo $?
+ ((  foo == 1  ))
+ echo 1
1

¿De dónde viene este comportamiento y por qué sería deseable?

Hace uso[[ en lugar de[ explícitamenteMenos seguro cuando se usa con operadores numéricos porque los valores no válidos y los errores tipográficos pasan de ser errores de script a pruebas silenciosamente válidas (pero probablemente erróneas).

Editar: como una pregunta secundaria si alguien sabecuando esta "característica" se agregó a bash / etc. Me interesaría saber eso también.

Respuestas a la pregunta(1)

Su respuesta a la pregunta