প্রথমত, আমি ধরে নিই যে ব্যবহারটি lsকেবল একটি উদাহরণ। আপনি lsকোনও শেলের আউটপুট বিশ্লেষণ করতে পারবেন না , কারণ এটি অস্পষ্ট। পড়ুন কেন আপনার ls (1) এর আউটপুট বিশ্লেষণ করবেন না যদি এটি আপনার কাছে খবর news যে কোনও শেলের মধ্যে ফাইলের একটি তালিকা পেতে ওয়াইল্ডকার্ডগুলি ব্যবহার করুন, যেমন files=(*)।
Zsh তে, অন্যান্য শেলের মতো, কমান্ড প্রতিস্থাপনের ফলাফলটি হোয়াইটস্পেস অক্ষরগুলিতে শব্দগুলিতে বিভক্ত হয় (আরও স্পষ্টভাবে, এর মান অনুসারে IFS)। (অন্যান্য শাঁসের বিপরীতে, কমান্ড প্রতিস্থাপনের ফলাফলটি zsh এ গ্লোব্বিংয়ের সাপেক্ষে নয়)) সুতরাং যদি lsকমান্ডের আউটপুট হয়
hello world
wibble
তারপর files=($(ls))সেট করে filesঅ্যারে 3 উপাদানগুলি থাকবে না: hello, worldএবং wibble।
যদি কমান্ড প্রতিস্থাপনটি ডাবল কোটে থাকে, তবে কোনও বিভাজন করা হবে না। আপনি প্যারামিটার বিস্তৃত পতাকাগুলির সাথে কাস্টম বিভাজন করতে পারেন । @বিভক্তির ফলাফলটি একটি অ্যারে হতে হবে তা চিহ্নিত করতে পতাকাটি ব্যবহার করুন (অদ্ভুতভাবে, আপনাকে ডাবল উদ্ধৃতিতে সম্প্রসারণটি রাখা দরকার "${(@)…}", যদিও ডাবল-কোটড স্ট্রিংটি একাধিক শব্দে প্রসারিত হবে)। বিভাজনের জন্য, sপতাকাটি ব্যবহার করুন , যেমন "${(@s:,:)…}"কমাতে বিভক্ত করতে; fপতাকা শুধুমাত্র নতুন লাইন এ splits।
files=("${(@f)$(ls)}")
নোট যে সাধারণভাবে একটি অ্যারের পুনরুক্তি উপর সঠিক ভাবে for f in $files[@], যেমন $filesখালি উপাদান (এখানে, এটা ব্যাপার কারণ উপাদানের খালি হবে না না) বন্ধ রেখাচিত্রমালা।
print $f$fযদি এটি শুরু হয় -এবং ব্যাকস্ল্যাশগুলি প্রসারিত করে তবে একটি স্যুইচ হিসাবে ব্যাখ্যা করে $f। ব্যবহার করুন print -r -- $f, বা print -rn -- $fআপনি স্ট্রিং পরে একটি নতুন লাইন যোগ করতে না চান।