Сьогодні я натрапив на сценарій Bash, який містить назви функцій із подвійними двокрапками ::
, наприклад, file::write()
та file::read()
. Я ніколи не бачив цього синтаксису в сценарії Bash, і коли я посилався на сценарій, він працював чудово (на моє здивування).
Переглянувши сторінку чоловіка Баша в моїй системі (і в Інтернеті), я не можу знайти нічого в документації, яка підтримує цей синтаксис для імен функцій. Наприклад, у розділі Shell Defined Functions
визначено синтаксис функції оболонки
function name [()] compound-command [redirection]
а потім (деінде в посібнику) маркер name
визначається як
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.
Ніде не згадується синтаксис подвійної двокрапки для імен функцій.
Єдина посилання на цей синтаксис подвійного двокрапки , що я знайшов до сих пір в цьому Shell Guide Style (див підрозділу Naming Conventions > Function Names
) , який рекомендує використовувати подвійний синтаксис двокрапки для імен функцій в «пакетах» - наприклад, mypackage::myfunction()
.
Чи цей синтаксис подвійного двокрапки для імен функцій є законною особливістю оболонки Bash, чи це, можливо, недокументована функція? Якщо це законно, де це зафіксовано у посібнику Bash? Я дивився і дивився, але нічого в цьому посібнику не можу знайти. Найближчий я знайшов застосування ::
в PATH
змінної оточення , щоб додати поточну робочу директорію на шляху пошуку.
ПРИКЛАД
#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
Я протестував цей скрипт на трьох різних дистрибутивах Linux і на всіх трьох сценаріях роздруковується abc::def
до stdout.
%%
у назвах функцій unix.stackexchange.com/questions/401166/…