今日、二重コロン_::
_を含む関数名が含まれているBashスクリプトに遭遇しました(例:file::write()
とfile::read()
)。私はこれまでBashスクリプトでこの構文を見たことがありませんでした。スクリプトを呼び出したところ、(驚いたことに)正常に実行されました。
私のシステム(およびオンライン)で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 Shellの正当な機能ですか、それとも文書化されていない機能ですか?正当な場合、Bashマニュアルのどこに記載されていますか?調べてみましたが、マニュアルでは何も見つかりません。私が見つけた最も近いものは、PATH
環境変数で_::
_を使用して、現在の作業ディレクトリを検索パスに追加することです。
[〜#〜]例[〜#〜]
_#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
_
このスクリプトを3つの異なるLinuxディストリビューションでテストし、3つすべてのスクリプトで_abc::def
_をstdoutに出力しました。
これは、おそらくフットガン係数を下げるために、実装よりもドキュメントが厳しい場合です。これは 前にここで説明しました です。 徹底的なテスト も参照してください。例:[}{
は有効な関数名です。
また、abc::def
は有効な変数名ではありません:
$ abc::def=foo
bash: abc::def=foo: command not found