ฟังก์ชั่นการจัดทำเอกสารด้วยตนเอง
คุณยังสามารถใช้:
เพื่อฝังเอกสารในฟังก์ชั่น
สมมติว่าคุณมีสคริปต์ไลบรารีที่mylib.sh
มีฟังก์ชั่นที่หลากหลาย คุณสามารถเลือกแหล่งที่มาของไลบรารี ( . mylib.sh
) และเรียกใช้ฟังก์ชันได้โดยตรงหลังจากนั้น ( lib_function1 arg1 arg2
) หรือหลีกเลี่ยงความยุ่งเหยิงในเนมสเปซของคุณและเรียกใช้ไลบรารีด้วยอาร์กิวเมนต์ของฟังก์ชัน ( mylib.sh lib_function1 arg1 arg2
)
มันจะไม่ดีถ้าคุณสามารถพิมพ์mylib.sh --help
และรับรายการฟังก์ชั่นที่มีอยู่และการใช้งานของพวกเขาโดยไม่ต้องบำรุงรักษารายการฟังก์ชั่นในข้อความช่วยเหลือด้วยตนเอง?
#! / bin / ทุบตี
# ฟังก์ชัน "สาธารณะ" ทั้งหมดต้องเริ่มต้นด้วยส่วนนำหน้านี้
LIB_PREFIX = 'lib_'
# "ฟังก์ชั่นห้องสมุด"
lib_function1 () {
: ฟังก์ชั่นนี้ทำอะไรบางอย่างที่ซับซ้อนด้วยสองข้อโต้แย้ง
:
: พารามิเตอร์:
: 'arg1 - อาร์กิวเมนต์แรก ($ 1)'
: 'arg2 - อาร์กิวเมนต์ที่สอง'
:
: ผลลัพธ์:
: " มันซับซ้อน"
# รหัสฟังก์ชันจริงเริ่มต้นที่นี่
}
lib_function2 () {
: เอกสารประกอบการใช้งาน
# รหัสฟังก์ชั่นที่นี่
}
ฟังก์ชั่นความช่วยเหลือ #
--ช่วยด้วย() {
echo MyLib v0.0.1
เสียงสะท้อน
การใช้งาน echo: mylib.sh [function_name [args]]
เสียงสะท้อน
echo ฟังก์ชั่นที่มีอยู่:
ประกาศ -f | sed -n -e '/ ^' $ LIB_PREFIX '/, / ^} $ / {/ \ (^' $ LIB_PREFIX '\) \ | \ (^ [\ t] *: \) / {
s / ^ \ ('$ LIB_PREFIX'. * \) () / \ n === \ 1 === /; s / ^ [\ t] *: \? ['\' '"] \? / / ; s / [ '\' '"] \; \ $ //; p}}'
}
# รหัสหลัก
if ["$ {BASH_SOURCE [0]}" = "$ {0}"]; แล้วก็
# สคริปต์ถูกดำเนินการแทนที่มา
# เรียกใช้ฟังก์ชันที่ร้องขอหรือแสดงความช่วยเหลือ
if ["$ (type -t -" $ 1 "2> / dev / null)" = function]; แล้วก็
"$ @"
อื่น
--ช่วยด้วย
Fi
Fi
ความคิดเห็นเล็กน้อยเกี่ยวกับรหัส:
- ฟังก์ชัน "สาธารณะ" ทั้งหมดมีคำนำหน้าเหมือนกัน มีเพียงผู้ใช้เท่านั้นที่ถูกเรียกใช้และแสดงอยู่ในข้อความช่วยเหลือ
- คุณสมบัติการจัดทำเอกสารด้วยตนเองขึ้นอยู่กับจุดก่อนหน้าและใช้
declare -f
ในการระบุฟังก์ชั่นที่มีอยู่ทั้งหมดจากนั้นกรองผ่าน Sed เพื่อแสดงเฉพาะฟังก์ชั่นที่มีส่วนนำหน้าที่เหมาะสม
- เป็นความคิดที่ดีที่จะใส่เอกสารไว้ในเครื่องหมายคำพูดเดี่ยวเพื่อป้องกันการขยายที่ไม่ต้องการและการลบช่องว่าง คุณจะต้องระมัดระวังเมื่อใช้เครื่องหมายอัญประกาศเดี่ยว / คำพูดในข้อความ
- คุณสามารถเขียนโค้ดเพื่อ internalize คำนำหน้าห้องสมุดคือผู้ใช้เท่านั้นที่มีการพิมพ์และจะได้รับการแปลภายในเพื่อ
mylib.sh function1
lib_function1
นี่คือแบบฝึกหัดที่เหลือไว้สำหรับผู้อ่าน
- ฟังก์ชั่นความช่วยเหลือมีชื่อว่า "--help" นี้เป็นความสะดวกสบาย (เช่นขี้เกียจ)
$1
วิธีการที่ใช้ห้องสมุดวิงวอนกลไกในการแสดงความช่วยเหลือตัวเองได้โดยไม่ต้องรหัสการตรวจสอบพิเศษสำหรับ ในเวลาเดียวกันมันจะถ่วงชื่อของคุณถ้าคุณแหล่งที่มาของห้องสมุด หากคุณไม่ชอบคุณสามารถเปลี่ยนชื่อเป็นชื่อที่ต้องการlib_help
หรือตรวจสอบ args สำหรับ--help
รหัสหลักและเรียกใช้ฟังก์ชันช่วยเหลือด้วยตนเอง