নতুনলাইনগুলি ভেরিয়েবলের মধ্যে রয়েছে। LS=$(ls -1)
চলকটিকে LS
আউটপুটে সেট করে ls -1
(যা ls
আউটপুট কোনও টার্মিনালে যায় কেবল ব্যতীত, একই আউটপুট উত্পাদন করে ), বিয়োগ পিছনে নতুন লাইনে।
সমস্যাটি হ'ল আপনি যখন মানটি মুদ্রণ করবেন তখন আপনি নিউলাইনগুলি সরিয়ে ফেলছেন। শেল স্ক্রিপ্টে, $LS
"ভেরিয়েবলের মান" বলতে বোঝায় না, এর অর্থ "এর মানটি LS
গ্রহণ করুন LS
, অনুযায়ী শব্দগুলিতে বিভক্ত করুন IFS
এবং প্রতিটি শব্দকে গ্লোব প্যাটার্ন হিসাবে ব্যাখ্যা করুন"। এর মান পেতে আপনার LS
লিখতে হবে "$LS"
, বা আরও সাধারণত $LS
ডাবল উদ্ধৃতিগুলির মধ্যে রাখতে হবে।
echo "$LS"
LS
ব্যাকস্ল্যাশ অক্ষর ব্যাখ্যা করে এমন কয়েকটি শেল ছাড়া এবং এর সাথে শুরু হওয়া কয়েকটি মান ব্যতীত এর মান মুদ্রণ করে -
।
printf "$LS"
LS
যতক্ষণ না এতে কোনও শতাংশ বা ব্যাকস্ল্যাশ অক্ষর থাকে এবং (বেশিরভাগ বাস্তবায়ন সহ) শুরু হয় না ততক্ষণ এর মান মুদ্রণ করে -
।
LS
ঠিক এর মান মুদ্রণ করতে , ব্যবহার করুন printf %s "$LS"
। আপনি যদি শেষে একটি নতুন লাইন চান তবে ব্যবহার করুন printf '%s\n' "$LS"
।
দ্রষ্টব্য যে $(ls)
, সাধারণভাবে, বর্তমান ডিরেক্টরিতে ফাইলগুলির তালিকা নয়। এটি কেবল তখনই কাজ করে যখন আপনার পর্যাপ্ত ফাইল নাম থাকবে। (ডট ফাইল ছাড়া) ফাইলের নাম তালিকা পেতে, আপনি একটি ওয়াইল্ডকার্ড ব্যবহার করা প্রয়োজন: *
। ফলাফলটি স্ট্রিং নয়, স্ট্রিংগুলির তালিকা, সুতরাং আপনি এটিকে স্ট্রিং ভেরিয়েবলের জন্য বরাদ্দ করতে পারবেন না; আপনি files=(*)
শেলগুলিতে একটি অ্যারে ভেরিয়েবল ব্যবহার করতে পারেন যা তাদের সমর্থন করে (ksh93, bash, zsh)।
আরও তথ্যের জন্য, দেখুন কেন আমার শেল স্ক্রিপ্টটি সাদা স্থান বা অন্যান্য বিশেষ অক্ষরগুলিতে চেপে যায়?
printf "%s\n" $LS
এটি করবে it