मैंने सोचा कि निम्नलिखित 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 में रिक्त स्थान के साथ सूची तत्वों पर उत्तर के बाद , मैंने भी IFS
zsh को इनपुट को विभाजित करने और तत्वों को एक सरणी में इकट्ठा करने के तरीके के बजाय पैरामीटर विस्तार झंडे का उपयोग करने की कोशिश की है , अर्थात:
array_of_lines=("${(@f)$(my_command)}");
लेकिन मुझे अभी भी वही परिणाम मिला है (विभाजन हो रहा है n
)
इसके साथ, मेरे पास निम्नलिखित प्रश्न हैं:
Q1। लाइनों के एक सरणी में कमांड के आउटपुट को इकट्ठा करने के "उचित" तरीके क्या हैं ?
Q2। मैं IFS
केवल newlines पर विभाजन कैसे निर्दिष्ट कर सकता हूं ?
Q3। अगर मैं @f
स्प्लिटिंग को निर्दिष्ट करने के लिए ऊपर (अर्थात उपयोग करके ) के रूप में पैरामीटर विस्तार झंडे का उपयोग करता हूं, तो क्या zsh मूल्य को अनदेखा करता है IFS
? यह ऊपर काम क्यों नहीं किया?
"${(@f)...}"
के रूप में ही है${(f)"..."}
, लेकिन एक अलग तरीके से।(@)
अंदर दोहरे कोट्स का अर्थ है "एरे एलीमेंट एलीमेंट एलिमेंट एलीमेंट एलिमेंट" और(f)
इसका मतलब है "न्यूलाइन द्वारा एरे में विभाजित होना"। पुनश्च: डॉक्स के