มีวิธีดูนิยามฟังก์ชั่นทุบตีในทุบตี?
ตัวอย่างเช่นสมมติว่าฉันกำหนดฟังก์ชัน foobar
function foobar {
echo "I'm foobar"
}
มีวิธีใดบ้างที่จะได้รับรหัสในภายหลังfoobarหรือไม่
$ # non-working pseudocode
$ echo $foobar
echo "I'm foobar"
มีวิธีดูนิยามฟังก์ชั่นทุบตีในทุบตี?
ตัวอย่างเช่นสมมติว่าฉันกำหนดฟังก์ชัน foobar
function foobar {
echo "I'm foobar"
}
มีวิธีใดบ้างที่จะได้รับรหัสในภายหลังfoobarหรือไม่
$ # non-working pseudocode
$ echo $foobar
echo "I'm foobar"
คำตอบ:
typeใช้ หากfoobarมีการกำหนดไว้เช่นในของคุณ~/.profile:
$ type foobar
foobar is a function
foobar {
echo "I'm foobar"
}
สิ่งนี้จะตรวจสอบว่าfoobarมันคืออะไรและถ้ามันถูกกำหนดเป็นฟังก์ชั่นมันจะเรียกdeclare -fตามที่อธิบายโดย pmohandras
หากต้องการพิมพ์เฉพาะส่วนของฟังก์ชั่น (เช่นรหัส) ให้ใช้sed:
type foobar | sed '1,3d;$d'
คุณสามารถแสดงความหมายของฟังก์ชั่นในทุบตีโดยใช้ประกาศ ตัวอย่างเช่น:
declare -f foobar
typeset -f
functionความหมายดังนั้นคุณไม่จำเป็นต้องแยกวิเคราะห์ว่าเป็นสิ่งที่คุณต้องการ
set | sed -n '/^foobar ()/,/^}/p'
สิ่งนี้จะพิมพ์บรรทัดจากคำสั่ง set ของคุณโดยเริ่มต้นด้วยชื่อฟังก์ชัน foobar () และลงท้ายด้วย}
set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'
โดยมี foobar เป็นชื่อฟังก์ชัน