Oggi mi sono imbattuto in uno script Bash che ha nomi di funzioni con due punti ::
in doppio , ad esempio, file::write()
e file::read()
. Non ho mai visto questa sintassi prima in uno script Bash, e quando ho invocato lo script è andato tutto bene (con mia sorpresa).
Dopo aver cercato la pagina man di Bash sul mio sistema (e online), non riesco a trovare nulla nella documentazione che supporti questa sintassi per i nomi delle funzioni. Ad esempio, la sezione Shell Defined Functions
definisce la sintassi per una funzione shell
function name [()] compound-command [redirection]
e quindi (altrove nel manuale) il token name
è definito come
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.
Non c'è alcun riferimento alla sintassi dei due punti per i nomi delle funzioni.
L'unico altro riferimento a questa sintassi a due punti che ho trovato finora è in questa Shell Style Guide (vedere la sottosezione Naming Conventions > Function Names
) che raccomanda di usare la sintassi a due punti per i nomi delle funzioni in "pacchetti" - ad es mypackage::myfunction()
.
Questa sintassi a due punti per i nomi delle funzioni è una caratteristica legittima della shell Bash o è forse una caratteristica non documentata? Se è legittimo, dove è documentato nel manuale di Bash? Ho guardato e guardato ma non riesco a trovare nulla al riguardo nel manuale. L'ho trovato'VE più vicino è l'uso di ::
nella PATH
variabile d'ambiente per aggiungere la directory di lavoro corrente al percorso di ricerca.
ESEMPIO
#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
Ho testato questo script su tre diverse distribuzioni Linux e su tutti e tre gli script vengono stampati abc::def
su stdout.
%%
nei nomi delle funzioni unix.stackexchange.com/questions/401166/…