Bash スクリプト関数名に二重コロン '::' が含まれています。

Bash スクリプト関数名に二重コロン '::' が含まれています。

今日、私はと::同じ関数名に二重コロンを持つBashスクリプトを見つけました。以前は、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.

関数名の二重コロン構文への言及はどこにもありません。

これまで私が見つけた二重コロン構文への唯一の他の参照は次のとおりです。シェルスタイルガイド(サブセクションを参照Naming Conventions > Function Names)「パッケージ」の関数名にデュアルコロン構文を使用することをお勧めしますmypackage::myfunction()。たとえば。

関数名の二重コロン構文は、Bashシェルの正当な機能ですか、それとも文書化されていない機能ですか?合法的なケースでは、Bashマニュアルのどこに文書化されていますか?閲覧して閲覧しましたが、マニュアルには関連がありません。私が見つけた最も近いのは、現在の作業ディレクトリを::環境変数の検索パスに追加することです。PATH

はい

#!/bin/bash
function abc::def() {
    echo "${FUNCNAME[0]}"
}
abc::def

私は3つの異なるLinuxディストリビューションでこのスクリプトをテストし、3つすべてでスクリプトをabc::def標準出力として印刷しました。

ベストアンサー1

これは、実装よりも文書がより厳しい場合であり、合計要因を減らすためのものかもしれません。これはすでに前にここで議論したこと;また見てください徹底したテストたとえば、[}{有効な関数名を設定します。

abc::defまた、これは有効な変数名ではないことにも注意する価値があります。

$ abc::def=foo
bash: abc::def=foo: command not found

おすすめ記事