มีวิธีดูนิยามฟังก์ชั่นทุบตีในทุบตี?
ตัวอย่างเช่นสมมติว่าฉันกำหนดฟังก์ชัน 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 เป็นชื่อฟังก์ชัน