bash - 为什么要为私有函数双下划线(__)?为什么(_)用于bash完成功能?

时间:2012-12-10 08:05:29

标签: bash function coding-style

当您查看您选择的Linux附带的bash函数时,您经常会看到private(在推荐意义上是私有的)函数是这样编写的:

__private_func() {
    :
}

所以,你首先想知道为什么不只是一个下划线(_)私有函数...然后你看到bash完成函数通常以一个下划线开始,通常用双下划线调用私有函数,如之前的例子:

_complete_func() {
    __private_func
}

我想知道的是:这是什么原因?是否有一些关于如何为私有函数添加前缀的约定?

1 个答案:

答案 0 :(得分:10)

我查看了bash手册页和POSIX shell standard,但无法找到有关此命名约定的任何内容。也就是说,使用下划线表示C中的保留名称或内部名称。引用libc manual on reserved names

  

除了本手册中记录的名称外,还有保留名称   包括所有外部标识符(全局函数和变量)   以下划线('_')和所有标识符开头,不管用途如何   以两个下划线或下划线后跟一个开头   大写字母是保留名称

此命名约定的主要逻辑是:

  

这样库和头文件可以定义函数,变量,   用于内部目的的宏和宏,没有与名称冲突的风险   在用户程序中

它还有一个好处,就是能够轻松地在“私有”和“公共”功能之间进行grep(我将其置于引号中,因为用户可以调用任何一种形式而不管命名)。