অ্যাসাইনমেন্টটি নতুন লাইন অক্ষরগুলি সরিয়ে দেয় না , এটি আসলে এটি echoকরছে। এই নতুনলাইনগুলি বজায় রাখতে আপনার স্ট্রিংয়ের চারপাশে কেবল উদ্ধৃতিগুলি দরকার:
echo "$testvar"
এই ইচ্ছা আপনি চান ফলাফল দিতে। একটি ডেমো জন্য নিম্নলিখিত প্রতিলিপি দেখুন:
pax> cat num1.txt ; x=$(cat num1.txt)
line 1
line 2
pax> echo $x ; echo '===' ; echo "$x"
line 1 line 2
===
line 1
line 2
কারণ কেন নতুন লাইন স্পেস দিয়ে প্রতিস্থাপিত হয় নয় সম্পূর্ণভাবে সঙ্গে কাজ করতে echo, কমান্ড বরং এটি কিছু সংমিশ্রণ আছে।
কমান্ড লাইন দেওয়া হলে bashএটিকে IFSভেরিয়েবলের ডকুমেন্টেশন অনুসারে শব্দগুলিতে বিভক্ত করে :
আইএফএস: অভ্যন্তরীণ ক্ষেত্র বিভাজক যা বিস্তারের পরে শব্দ বিভাজনের জন্য ব্যবহৃত হয় ... ডিফল্ট মান <space><tab><newline>।
এটি নির্দিষ্ট করে যে ডিফল্টরূপে, এই তিনটি অক্ষরের যে কোনও একটিই আপনার কমান্ডকে পৃথক শব্দের মধ্যে বিভক্ত করতে ব্যবহার করা যেতে পারে। এর পরে, বিভাজক শব্দটি চলে গেছে, আপনি যা রেখে গেছেন তা শব্দের একটি তালিকা।
echoডকুমেন্টেশনের সাথে এটি একত্রিত করুন (একটি bashঅভ্যন্তরীণ কমান্ড), এবং আপনি দেখবেন যে ফাঁকা স্থানগুলি আউটপুট কেন:
প্রতিধ্বনি [-neE] [আরগ ...]: ফাঁকা দ্বারা পৃথক করা আরগগুলি আউটপুট করুন, তারপরে একটি নতুন লাইন।
আপনি যখন ব্যবহার করেন echo "$x", এটি সম্পূর্ণ xপরিবর্তনশীলকে একক শব্দ হিসাবে বাধ্যতামূলক করে bash, তাই এটি বিভক্ত হয় না। আপনি এটি দিয়ে দেখতে পারেন:
pax> function count {
...> echo $#
...> }
pax> count 1 2 3
3
pax> count a b c d
4
pax> count $x
4
pax> count "$x"
1
এখানে, countফাংশনটি সহজেই প্রদত্ত আর্গুমেন্টগুলির সংখ্যা প্রিন্ট করে। 1 2 3এবং a b c dরূপগুলো ক্রিয়াটি সেটি প্রদর্শন করুন।
তারপরে আমরা xভেরিয়েবলের দুটি পরিবর্তনের সাথে এটি চেষ্টা করি । এক ছাড়া কোট শো চার শব্দ আছে, "test", "1", "test"এবং "2"। উদ্ধৃতি যোগ করা এটি একটি একক শব্দ করে "test 1\ntest 2"।