26

選択したLinuxに付属しているbash関数を見ると、private(推奨の意味でプライベートな)関数が次のように記述されていることがよくあります。

__private_func() {
    :
}

したがって、最初に、プライベート関数に1つのアンダースコア()だけではないのはなぜか疑問に思い_ます...次に、bash補完関数は通常、単一のアンダースコアで始まり、前の例のように、通常は二重のアンダースコアでプライベート関数を呼び出します。

_complete_func() {
    __private_func
}

私が知りたいのは:これについての理由は何ですか?また、プライベート関数のプレフィックスを付ける方法についての規則はありますか?

4

1 に答える 1

19

bashのマニュアルページとPOSIXシェル標準を調べましたが、この命名規則に関して何も見つかりませんでした。とはいえ、Cで予約名または内部名を示すためにアンダースコアが使用されています。予約名に関するlibcマニュアルを引用するには、次のようにします。

このマニュアルに記載されている名前に加えて、予約名には、アンダースコア('_')で始まるすべての外部識別子(グローバル関数と変数)と、使用に関係なく、2つのアンダースコアまたはアンダースコアの後に大文字は予約名です

この命名規則の主なロジックは次のとおりです。

ライブラリとヘッダーファイルが、ユーザープログラムの名前と競合するリスクなしに、内部目的で関数、変数、およびマクロを定義できるようにします。

また、「プライベート」関数と「パブリック」関数(ユーザーは名前に関係なくどちらのフォームも呼び出すことができるため、引用符で囲みます)を簡単にgrepできるという利点もあります。

于 2013-03-03T03:05:13.523 に答える