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 หรือในเชลล์สคริปต์"