bash syntax operators legacy arithmetic-expressions

bash: $[<arithmetic-expression>] contra $((<arithmetic-expression>))



syntax operators (2)

Acabo de tropezar con la sintaxis bash:

foo=42 bar=$[foo+1] # evaluates an arithmetic expression

Cuando busqué en Google esto, encontré http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_05 :

3.4.6. Expansión aritmética

La expansión aritmética permite la evaluación de una expresión aritmética y la sustitución del resultado. El formato para la expansión aritmética es:

$(( EXPRESSION ))

...

Siempre que sea posible, los usuarios de Bash deben intentar usar la sintaxis con corchetes:

$[ EXPRESSION ]

Sin embargo, esto solo calculará el resultado de EXPRESSION, y no hará pruebas ...

En mi página bash man solo puedo encontrar el formulario $(( EXPRESSION )) como:

foo=42 bar=$((foo+1)) # evaluates an arithmetic expression

Entonces, ¿qué pruebas no se realizan con $[...] que hacen con $((...)) , o es el $[...] una versión heredada de $((...)) ?


@sth es completamente correcto. Y en caso de que sienta curiosidad acerca de por qué una sintaxis más detallada ahora está a favor, consulte este correo electrónico anterior de la lista de correo.

http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00033.html

"En las primeras propuestas, se utilizó un formulario $ [expresión]. Era funcionalmente equivalente al "$ (())" del texto actual, pero se formularon objeciones de que el KornShell de 1988 ya había implementado "$ (())" y no había una razón convincente para inventar otra sintaxis. Además, la sintaxis "$ []" tenía una incompatibilidad menor que involucraba los patrones en las declaraciones de casos ".

No estoy seguro de que me guste el razonamiento "pero alguien ya lo ha hecho de forma más verborrea", pero ahí lo tiene, ¿tal vez el problema de la declaración de caso fue más convincente de lo que imagino a partir de esta mención oscura?


La página de manual para bash v3.2.48 dice:

[...] El formato para la expansión aritmética es:

$((expression))

El antiguo formato $ [expresión] está en desuso y se eliminará en las próximas versiones de bash.

Así que $[...] es una sintaxis antigua que ya no debería usarse.