Bash सीधे फंक्शन्स से ऐरे (arrays) वापस करने का समर्थन नहीं करता है। हालाँकि, हम चतुर तकनीकों का उपयोग करके इसे प्राप्त कर सकते हैं। यह लेख दो प्रभावी तरीकों का पता लगाता है: कमांड सब्स्टिट्यूशन और इंटरनल फील्ड सेपरेटर (IFS) में हेरफेर करना।
विषय-सूची
- कमांड सब्स्टिट्यूशन
- कमांड सब्स्टिट्यूशन के साथ ऐरे वापस करना
- IFS के साथ ऐरे वापस करना
- सर्वोत्तम विधि चुनना
कमांड सब्स्टिट्यूशन
कमांड सब्स्टिट्यूशन किसी कमांड के आउटपुट को कैप्चर करता है और उसे एक वेरिएबल को असाइन करता है। यह हमारी पहली विधि का आधार बनता है। कुंजी एक ऐरे में वापस आसान पार्सिंग के लिए फ़ंक्शन के आउटपुट को प्रारूपित करना है।
कमांड सब्स्टिट्यूशन के साथ ऐरे वापस करना
इस विधि में एक सीमांकक का उपयोग करके ऐरे तत्वों को एक स्ट्रिंग में जोड़ना और फिर स्ट्रिंग को वापस एक ऐरे में विभाजित करना शामिल है। आइए एक उदाहरण देखें:
my_array_function() {
local array=("apple" "banana" "cherry")
local delimiter="|"
echo "${array[*]}" | tr ' ' 'n' | paste -sd"$delimiter" -
}
returned_string=$(my_array_function)
returned_array=(${returned_string//|$delimiter/ })
echo "Returned array: ${returned_array[@]}"
यह कैसे काम करता है:
my_array_function
एक स्थानीय ऐरे बनाता है।- यह रिक्त स्थानों को नई लाइनों से बदलने के लिए
echo
,tr
और सीमांकक के साथ तत्वों को जोड़ने के लिएpaste
का उपयोग करता है। - कमांड सब्स्टिट्यूशन
returned_string
में आउटपुट को कैप्चर करता है। - पैरामीटर विस्तार ऐरे
returned_array
बनाने के लिए सीमांकक को रिक्त स्थानों से बदल देता है।
यह दृष्टिकोण सरल और प्रभावी है, लेकिन सीमांकक ऐरे तत्वों में नहीं दिखना चाहिए। यदि ऐसा होता है, तो कम सामान्य वर्ण या अधिक मजबूत सीमांकक हैंडलिंग विधि पर विचार करें।
IFS के साथ ऐरे वापस करना
इंटरनल फील्ड सेपरेटर (IFS) नियंत्रित करता है कि Bash स्ट्रिंग्स को शब्दों में कैसे विभाजित करता है। हम फ़ंक्शन के भीतर IFS सेट करके और ऐरे तत्वों को प्रिंट करके ऐरे वापस करने के लिए इसका लाभ उठा सकते हैं। कॉलिंग स्क्रिप्ट तब आउटपुट को पार्स करने के लिए संशोधित IFS का उपयोग करता है।
my_array_function() {
local array=("apple" "banana" "cherry")
local old_ifs="$IFS"
IFS=$'n'
printf "%sn" "${array[@]}"
IFS="$old_ifs"
}
returned_array=($(my_array_function))
echo "Returned array: ${returned_array[@]}"
व्याख्या:
my_array_function
वर्तमान IFS को सहेजता है।- यह IFS को एक नई लाइन वर्ण पर सेट करता है।
- यह प्रत्येक ऐरे तत्व को एक नई लाइन पर प्रिंट करता है।
- यह IFS को पुनर्स्थापित करता है।
- कॉलिंग स्क्रिप्ट ऐरे बनाने के लिए न्यूलाइन को सेपरेटर के रूप में उपयोग करता है।
यदि आपके ऐरे तत्वों में न्यूलाइन नहीं हैं, तो यह विधि साफ-सुथरी है। न्यूलाइन वाले तत्वों के लिए, आपको एक अलग, कम संभावित IFS वर्ण चुनने की आवश्यकता है।
सर्वोत्तम विधि चुनना
दोनों विधियाँ व्यवहार्य समाधान प्रदान करती हैं। सबसे अच्छा विकल्प आपकी विशिष्ट आवश्यकताओं और ऐरे सामग्री पर निर्भर करता है। कमांड सब्स्टिट्यूशन दृष्टिकोण सीमांकक चयन के साथ अधिक लचीलापन प्रदान करता है, जबकि IFS का उपयोग करना साफ-सुथरा हो सकता है यदि आपका डेटा इसकी अनुमति देता है। हमेशा स्वच्छ, मजबूत और अच्छी तरह से टिप्पणी किए गए कोड को प्राथमिकता दें।