ฉันมาข้ามสคริปต์ทุบตีในวันนี้ว่ามีฟังก์ชั่นที่มีชื่อทวิภาคคู่::
ในพวกเขาเช่นและfile::write()
file::read()
ฉันไม่เคยเห็นไวยากรณ์นี้มาก่อนในสคริปต์ Bash และเมื่อฉันเรียกใช้สคริปต์สคริปต์จะทำงานได้ดี (ทำให้ฉันประหลาดใจ)
หลังจากกำจัด man page ของ 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
ฉันทดสอบสคริปต์นี้ใน Linux distros ที่แตกต่างกันสามแบบและสคริปต์ทั้งสามabc::def
จะพิมพ์ไปที่ stdout
%%
ในชื่อฟังก์ชันunix.stackexchange.com/questions/401166/…