我今天遇到了一个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.
没有任何提及函数名的双冒号语法。
到目前为止,我在此《Shell Style Guide》(请参阅小节Naming Conventions > Function Names
)中找到了对此双冒号语法的唯一其他参考,该指南建议对“包”中的函数名使用双冒号语法-例如,mypackage::myfunction()
。
函数名称的这种双冒号语法是Bash shell的合法功能,还是未公开的功能?如果合法,Bash手册中将其记录在哪里?我已经看了看,但是在手册中找不到任何有关它的信息。我发现最接近的是::
在PATH
环境变量中使用,将当前工作目录添加到搜索路径。
例
#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
我在三个不同的Linux发行版上测试了该脚本,并在所有三个脚本上将其打印abc::def
到stdout。
他们允许- stackoverflow.com/questions/44558080/...
—
SLM
人们可能还会
—
michael
%%
在函数名称中看到unix.stackexchange.com/questions/401166/…–
感谢您的链接。奇。在发布之前,我搜索了“ bash double冒号”(不含引号),但未找到任何内容。很抱歉再次提出已回答的问题。。
—
吉姆·菲舍尔