Me encontré con un script de Bash hoy que tiene nombres de funciones con dos puntos dobles ::
en ellos, por ejemplo, file::write()
y file::read()
. Nunca antes había visto esta sintaxis en un script Bash, y cuando invoqué el script funcionó bien (para mi sorpresa).
Después de recorrer la página de manual de Bash en mi sistema (y en línea), no puedo encontrar nada en la documentación que admita esta sintaxis para los nombres de funciones. Por ejemplo, la sección Shell Defined Functions
define la sintaxis para que una función de shell sea
function name [()] compound-command [redirection]
y luego (en otra parte del manual) el token name
se define como
name A word consisting only of alphanumeric characters and
underscores, and beginning with an alphabetic character
or an underscore. Also referred to as an identifier.
No se menciona en ninguna parte la sintaxis de dos puntos dobles para los nombres de funciones.
La única otra referencia a esta sintaxis dos puntos dobles que he encontrado hasta ahora es en esta Guía de Estilo de la carcasa (véase la subsección Naming Conventions > Function Names
) que recomienda el uso de la sintaxis de dos puntos dobles para los nombres de función en "paquetes" - por ejemplo, mypackage::myfunction()
.
¿Es esta sintaxis de dos puntos dobles para los nombres de funciones una característica legítima del shell Bash, o es quizás una característica no documentada? Si es legítimo, ¿dónde está documentado en el manual de Bash? He buscado y buscado pero no puedo encontrar nada al respecto en el manual. Lo más cercano que he encontrado es el uso de ::
la PATH
variable de entorno para agregar el directorio de trabajo actual a la ruta de búsqueda.
EJEMPLO
#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
Probé este script en tres distribuciones de Linux diferentes, y en los tres el script se imprime abc::def
en stdout.
fuente
%%
en los nombres de funciones unix.stackexchange.com/questions/401166/…Respuestas:
Este es un caso en el que la documentación es más estricta que la implementación, posiblemente en un intento de reducir el factor de pistolas. Esto se ha discutido aquí antes ; vea también la prueba exhaustiva que establece que, por ejemplo,
[}{
es un nombre de función válido.También vale la pena señalar que
abc::def
no es un nombre de variable válido:fuente
file::read
ni[}{
posix es válido