二重コロン「::」を含むBashスクリプト関数名


17

私は二重のコロンと関数名があるbashスクリプト今日出会った::それらの中に、例えば、file::write()file::read()。Bashスクリプトでこの構文を見たことがないので、スクリプトを呼び出したときは正常に実行されました(驚いたことに)。

私のシステム(およびオンライン)でBashのmanページを精査した後、関数名のこの構文をサポートするドキュメントで何も見つかりません。たとえば、このセクションで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マニュアルのどこに記載されていますか?私は見て、見ましたが、マニュアルでそれについて何も見つけることができません。最も近いIましFOUNDはの使用である::PATH検索パスに現在の作業ディレクトリを追加するための環境変数。

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

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


-これらは許可されているstackoverflow.com/questions/44558080/...
SLM


リンクをありがとう。奇数。投稿する前に、「bash double colon」(引用符なし)を検索しましたが、何も見つかりませんでした。すでに回答済みの質問を再質問して申し訳ありません。。
ジムフィッシャー

回答:


16

これは、実装よりも厳密なドキュメントの場合です。おそらく、フットガンの要素を下げる試みです。これは以前ここで議論れました ; たとえば、有効な関数名であることを確認する徹底的なテストも参照してください[}{

abc::def有効な変数名ではないことにも注意してください。

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

4
明確にするためだけでfile::readなく[}{、有効なPOSIX ではありません
スティーブンペニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.