我今天遇到一个 Bash 脚本,::
其中的函数名称中带有双冒号,例如file::write()
和file::read()
。我以前从未在 Bash 脚本中见过这种语法,当我调用该脚本时,它运行得很好(令我惊讶)。
在我的系统(和在线)上搜索 Bash 的手册页后,我在文档中找不到任何支持此函数名称语法的内容。例如,本节Shell Defined Functions
将 shell 函数的语法定义为
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.
没有任何地方提到函数名称的双冒号语法。
到目前为止我发现的对这个双冒号语法的唯一其他引用是在这个外壳风格指南(参见小节Naming Conventions > Function Names
)它建议对“包”中的函数名称使用双冒号语法——例如,mypackage::myfunction()
.
函数名称的双冒号语法是 Bash shell 的合法功能,还是可能是未记录的功能?如果它是合法的,那么它在 Bash 手册中的记录在哪里?我看了又看,但在手册中找不到任何相关内容。我发现的最接近的是::
在环境变量中使用PATH
将当前工作目录添加到搜索路径。
例子
#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
我在三个不同的 Linux 发行版上测试了这个脚本,并且在所有三个发行版上,脚本都打印abc::def
到标准输出。