awkawkकार्य चला सकते हैं । 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 या शेल स्क्रिप्ट में परिभाषित है"।