awkสามารถเรียกใช้awkฟังก์ชั่น เพื่อให้เรียกใช้bashฟังก์ชันคุณจะต้องawkดำเนินการbashเชลล์bashเพื่อตีความนิยามของฟังก์ชันนั้นและเรียกใช้ฟังก์ชันนั้นโดยมีค่าที่แยกออกมาโดยawkผ่านเป็นอาร์กิวเมนต์
ไม่น่ารำคาญ
bashรองรับฟังก์ชั่นการส่งออกดังนั้นจึงมีให้บริการในการเรียกใช้ครั้งต่อไปbashดังนั้นจึงเป็นวิธีหนึ่งในการส่งคำจำกัดความของฟังก์ชันไปยังการbashเรียกใช้โดยawk:
export -f d2h
วิธีเดียวสำหรับawkการดำเนินการคำสั่ง ( bashที่นี่) อยู่กับมันsystem("cmd")หรือหรือprint... | "cmd" "cmd" | getlineในทุกกรณีawkวิ่งเปลือกจะตีความว่าcmdแต่มันจะไม่sh bashดังนั้นคุณจำเป็นต้องสร้างบรรทัดคำสั่งสำหรับshสิ่งนั่นคือการbashภาวนาที่ตีความbashบรรทัดคำสั่งเพื่อเรียกใช้ฟังก์ชั่นดังนั้นคุณต้องระวังด้วยการอ้างถึง:
export -f d2h
<file awk -v q="'" '
function shquote(s) {
gsub(q, q "\\" q q, s)
return q s q
}
{print $1; system("bash -c '\''d2h \"$1\"'\'' bash " shquote($2))}'
นั่นหมายความว่าการรันหนึ่งshและหนึ่งbashสำหรับแต่ละบรรทัดดังนั้นจะค่อนข้างไม่มีประสิทธิภาพ นั่นจะจบลงด้วยการที่ไม่มีประสิทธิภาพมากกว่าbashการอ่านและการแยกด้วยwhile read loop:
(unset IFS; while read -r a b rest; do
printf '%s\n' "$a"
d2h "$b"
done < file)
d2hเป็นไฟล์ที่เรียกใช้งานได้ แต่ไม่ใช่ถ้าเป็น "ฟังก์ชันที่กำหนดไว้ใน. bashrc หรือในเชลล์สคริปต์"