आपको इसके बजाय उपयोग करना चाहिएprintfecho :
printf "%s\n" "${mtches[@]}"
यदि mtchesखाली है जो अभी भी एक खाली लाइन का उत्पादन करेगा। उस के लिए खाते में:
{ [ "${#mtches[@]}" -eq 0 ] || printf '%s\n' "${mtches[@]}"; } > file
में bash(और यह भी POSIX गोले), जिनका उपयोग आप अक्सर स्थितीय पैरामीटर सरणी के रूप में "$@"करने के बजाय "$*", जब तक आप एक विशेष कारण है। यह भी गोले में सच है जो नियमित रूप से सरणियों का समर्थन करता है , आदमी बैश से - अनुभाग अरे :
किसी सरणी के किसी भी तत्व को $ {name [सबस्क्रिप्ट]} का उपयोग करके संदर्भित किया जा सकता है। ब्रेस को शेल के फाइलनाम विस्तार ऑपरेटरों के साथ संघर्ष से बचने के लिए आवश्यक है। यदि सबस्क्रिप्ट '@' या '*' है, तो शब्द ऐरे नाम के सभी सदस्यों तक फैलता है। ये सदस्यता केवल तभी भिन्न होती है जब शब्द दोहरे उद्धरण चिह्नों में प्रकट होता है। यदि यह शब्द दोहरा-उद्धृत है, तो $ {name [*]} IFS चर के पहले वर्ण द्वारा अलग किए गए प्रत्येक सरणी सदस्य के मान के साथ एक शब्द तक फैलता है, और $ {name [@]} नाम के प्रत्येक तत्व का विस्तार करता है एक अलग शब्द के लिए। जब कोई सरणी सदस्य नहीं होते हैं, तो $ {name [@]} कुछ भी नहीं फैलता है। यदि किसी शब्द के भीतर डबल-कोटेड विस्तार होता है, तो पहले पैरामीटर का विस्तार मूल शब्द के शुरुआती भाग के साथ जुड़ जाता है, और अंतिम पैरामीटर का विस्तार मूल शब्द के अंतिम भाग के साथ जुड़ जाता है।
"${array[*]}"जब आप सभी ऐरे तत्वों को एक स्ट्रिंग में शामिल करना चाहते हैं तब ही उपयोग करें ।