今日、私はと::
同じ関数名に二重コロンを持つ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