मैंने सोचा कि निम्नलिखित my_commandलाइनों के एक समूह में आउटपुट का समूह होगा :
IFS='\n' array_of_lines=$(my_command);
ताकि $array_of_lines[1]के उत्पादन में पहली पंक्ति को उल्लेख करता है my_command, $array_of_lines[2]इसके आगे दूसरे के लिए, और।
हालाँकि, ऊपर की कमांड अच्छी तरह से काम नहीं करती है। यह my_commandचरित्र के चारों ओर के आउटपुट को विभाजित करने के लिए भी प्रतीत होता है n, जैसा कि मैंने के साथ जाँच की है print -l $array_of_lines, जो मुझे लगता है कि लाइन द्वारा एक सरणी लाइन के तत्वों को प्रिंट करता है। मैंने भी इसके साथ जाँच की है:
echo $array_of_lines[1]
echo $array_of_lines[2]
...
दूसरे प्रयास में, मुझे लगा कि evalइससे मदद मिल सकती है:
IFS='\n' array_of_lines=$(eval my_command);
लेकिन मुझे इसके बिना भी ठीक वैसा ही परिणाम मिला।
अंत में, zsh में रिक्त स्थान के साथ सूची तत्वों पर उत्तर के बाद , मैंने भी IFSzsh को इनपुट को विभाजित करने और तत्वों को एक सरणी में इकट्ठा करने के तरीके के बजाय पैरामीटर विस्तार झंडे का उपयोग करने की कोशिश की है , अर्थात:
array_of_lines=("${(@f)$(my_command)}");
लेकिन मुझे अभी भी वही परिणाम मिला है (विभाजन हो रहा है n)
इसके साथ, मेरे पास निम्नलिखित प्रश्न हैं:
Q1। लाइनों के एक सरणी में कमांड के आउटपुट को इकट्ठा करने के "उचित" तरीके क्या हैं ?
Q2। मैं IFSकेवल newlines पर विभाजन कैसे निर्दिष्ट कर सकता हूं ?
Q3। अगर मैं @fस्प्लिटिंग को निर्दिष्ट करने के लिए ऊपर (अर्थात उपयोग करके ) के रूप में पैरामीटर विस्तार झंडे का उपयोग करता हूं, तो क्या zsh मूल्य को अनदेखा करता है IFS? यह ऊपर काम क्यों नहीं किया?
"${(@f)...}"के रूप में ही है${(f)"..."}, लेकिन एक अलग तरीके से।(@)अंदर दोहरे कोट्स का अर्थ है "एरे एलीमेंट एलीमेंट एलिमेंट एलीमेंट एलिमेंट" और(f)इसका मतलब है "न्यूलाइन द्वारा एरे में विभाजित होना"। पुनश्च: डॉक्स के