Bugün, içinde çift sütun ::
bulunan işlev adlarına sahip bir Bash komut dosyası ile karşılaştım , örneğin, file::write()
vefile::read()
. Daha önce bir Bash betiğinde bu sözdizimini hiç görmedim ve betiği çağırdığımda gayet iyi koştu (sürprizime).
Sistemimde (ve çevrimiçi) Bash'ın kılavuz sayfasını inceledikten sonra, dokümanlarda işlev adları için bu sözdizimini destekleyen hiçbir şey bulamıyorum. Örneğin, bölüm Shell Defined Functions
, bir kabuk işlevinin sözdizimini
function name [()] compound-command [redirection]
ve daha sonra (başka bir yere kılavuzunu) belirteci name
olarak tanımlanmaktadır
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.
İşlev adları için çift kolon sözdiziminin hiçbir yerinde söz edilmez.
Şimdiye kadar bulduğum bu çift kolon sözdizimine diğer tek referans , "paketlerde" işlev adları için çift kolon sözdiziminin kullanılmasını öneren bu Kabuk Stil Kılavuzu'ndadır (alt bölüme bakın Naming Conventions > Function Names
) - örn mypackage::myfunction()
.
İşlev adları için bu çift kolon sözdizimi, Bash kabuğunun meşru bir özelliği mi, yoksa belki de belgelenmemiş bir özellik mi? Yasalsa, Bash kılavuzunda nerede belgelenmiştir? Baktım ve baktım ama kılavuzda hiçbir şey bulamıyorum. En yakın Ben ettik arasından kullanılmasıdır ::
içinde PATH
arama yoluna Geçerli çalışma dizini eklemek için ortam değişkeni.
MİSAL
#!/bin/bash
function abc::def() {
echo "${FUNCNAME[0]}"
}
abc::def
Bu komut dosyasını üç farklı Linux dağıtımında test ettim ve her üçünde de komut dosyası abc::def
stdout'a yazdırıyor .