আমি ভেবেছিলাম নিম্নলিখিতগুলি আউটপুটটিকে 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)
এটির সাথে আমার নিম্নলিখিত প্রশ্নগুলি রয়েছে:
চতুর্থাংশ 1। লাইনের অ্যারেতে কমান্ডের আউটপুট সংগ্রহ করার "সঠিক" উপায়গুলি কী কী ?
Q2 এর। আমি কীভাবে IFSকেবলমাত্র নিউলাইনগুলিতে বিভক্ত করতে নির্দিষ্ট করতে পারি ?
চতুর্থাংশ 3। আমি যদি আমার তৃতীয় প্রয়াস হিসাবে প্যারামিটার সম্প্রসারণের পতাকাগুলি ব্যবহার করি (যেমন ব্যবহার করে @f) বিভাজন নির্দিষ্ট করতে, zsh এর মানটিকে অগ্রাহ্য করে IFS? কেন এটি উপরে কাজ করে না?
"${(@f)...}"হিসাবে একই${(f)"..."}, কিন্তু অন্যভাবে।(@)ডাবল কোটের অভ্যন্তরের অর্থ "অ্যারের উপাদান অনুসারে একটি শব্দ অর্জন করুন" এবং এর(f)অর্থ "নিউলাইন দ্বারা অ্যারেতে বিভক্ত" means পিএস: দয়া করে দস্তাবেজের সাথে