¿Qué significa un signo de dólar seguido de un corchete $ [...] en bash?

34

Parece que $[expr]realiza la expansión aritmética al igual que $((expr)). Pero no puedo encontrar ninguna mención $[en el manual de bash. Este comando no da resultados:

gunzip -c /usr/share/man/man1/bash.1.gz | grep -E '\$\['

¿Qué es este operador y su comportamiento está estandarizado en alguna parte?

Mi versión bash: GNU bash, versión 3.2.51 (1) -release (x86_64-apple-darwin13)

AmadeusDrZaius
fuente
3
Para responder explícitamente a su pregunta sobre un estándar : La sintaxis bashespecífica (obsoleta) $[...]no es estándar. El $((...))(que se deriva de ksh) es el estándar POSIX.
Janis
2
Con Ubuntu 11.04: man bash | grep -E '\$\['. Salida: el formato anterior $ [expresión] está en desuso y se eliminará en las próximas versiones
Cyrus
las páginas man pueden contener cosas como _t_h_i_s (que luego es interpretada por la utilidad man para que aparezca de manera diferente), por lo que su grep podría fallar si sucede lo que busca se suponía que se notara así
Olivier Dulac

Respuestas:

19

Puedes encontrar la fuente antigua de bash aquí . En particular, descargué bash-1.14.7.tar.gz . En el documentation/bash.txtencontrarás:

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. Hay dos formatos para la expansión aritmética:

     $[expression]

     $((expression))

Las referencias a $[han desaparecido doc/bash.htmlde la descarga bash-doc-2.0.tar.gz y el NEWSarchivo menciona que:

La $[...]sintaxis de expansión aritmética ya no es compatible, a favor de $((...)).

$((...))también es la sintaxis estándar para una expansión aritmética, pero puede haberse agregado al estándar más tarde que la implementación Bash original.

Sin embargo, $[...]todavía parece funcionar en Bash 5.0, por lo que no se elimina por completo.

Trauma digital
fuente
27

En un hilo de la lista de correo de GNU bash , dice que la $[sintaxis era una sintaxis temprana que fue desaprobada a favor $((, ya que la última ya fue utilizada por el shell Korn.

Según este sitio , el manual de bash 3.2.48 contenía una referencia a la $[sintaxis. Entonces, presumiblemente, esta referencia se había eliminado en 3.2.51.

AmadeusDrZaius
fuente