Natknąłem skryptu bash dziś, że ma nazwy funkcji z podwójnym dwukropkiem ::
w nich, na przykład, file::write()
i file::read()
. Nigdy wcześniej nie widziałem tej składni w skrypcie Bash, a kiedy wywołałem skrypt, działał on dobrze (ku mojemu zdziwieniu).
Po przeszukaniu strony podręcznika Basha w moim systemie (i online) nie mogę znaleźć niczego w dokumentacji, która obsługuje tę składnię dla nazw funkcji. Na przykład sekcja Shell Defined Functions
definiuje składnię funkcji powłoki
function name [()] compound-command [redirection]
a następnie (gdzie indziej w instrukcji) token name
jest zdefiniowany jako
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.
Nigdzie nie ma wzmianki o składni podwójnego dwukropka dla nazw funkcji.
Jedyne inne odniesienie do tej składni dwukropka, które do tej pory znalazłem, znajduje się w tym Przewodniku po stylach powłoki (patrz podrozdział Naming Conventions > Function Names
), który zaleca stosowanie składni podwójnego dwukropka dla nazw funkcji w „pakietach” - np mypackage::myfunction()
.
Czy ta podwójna składnia dwukropka dla nazw funkcji jest uzasadnioną funkcją powłoki Bash, czy może jest to funkcja nieudokumentowana? Jeśli jest to zgodne z prawem, to gdzie jest to udokumentowane w podręczniku Bash? Patrzyłem i szukałem, ale nie mogę znaleźć niczego na ten temat w instrukcji. Najbliższe, jakie znalazłem, to użycie ::
w PATH
zmiennej środowiskowej do dodania bieżącego katalogu roboczego do ścieżki wyszukiwania.
PRZYKŁAD
#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
Testowałem ten skrypt na trzech różnych dystrybucjach Linuksa i na wszystkich trzech skryptach drukuje się abc::def
na standardowe wyjście.
%%
w nazwach funkcji unix.stackexchange.com/questions/401166/…