De onde vem a expansão recursiva da variável em contextos numéricos bash / shell?

A especificação POSIX indica com relação aExpansão Aritmética este

[i] se a variável do shell x contém um valor que forma uma constante inteira válida, opcionalmente incluindo um sinal de mais ou menos, as expansões aritméticas "$ ((x))" e "$ (($ x))" devem retorne o mesmo valor.

O que é um atalho razoável e limpa bastante as expressões complicadas.

bash (versões3.2.25(1)-release do CentOS 5 e4.3.33(1)-release do debian unstable), bem como o ksh (Version AJM 93t+ 2010-06-21 do CentOS 5) todos parecem dar um passo além do que no entanto.

Todos eles parecem expandir recursivamente variáveis encontradas na expansão aritmética (e contextos numéricos em[[ resultante do uso dos operadores numéricos).

Especificamente:

$ 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 onde vem esse comportamento e por que seria desejável?

Faz usando[[ no lugar de[ explicitamenteMenos seguro quando usado com operadores numéricos, porque valores inválidos e erros tipográficos vão de erros de script a testes silenciosamente válidos (mas provavelmente errados).

Edit: Como uma pergunta secundária, se alguém souberquando este "recurso" foi adicionado ao bash / etc. Eu estaria interessado em saber isso também.

questionAnswers(1)

yourAnswerToTheQuestion