আমার কাছে যদি ফাইলটি থাকে input.txt
:
hello
world
!
তারপরে bash কমান্ড কার্যকর করে এটি echo $(cat input.txt)
আউটপুট দেয়:
hello world !
কেন এবং কীভাবে আমি এটির আউটপুট ঠিক করতে পারি যে ফাইলটিতে এটি কীভাবে রয়েছে?
আমার কাছে যদি ফাইলটি থাকে input.txt
:
hello
world
!
তারপরে bash কমান্ড কার্যকর করে এটি echo $(cat input.txt)
আউটপুট দেয়:
hello world !
কেন এবং কীভাবে আমি এটির আউটপুট ঠিক করতে পারি যে ফাইলটিতে এটি কীভাবে রয়েছে?
উত্তর:
আপনি যদি ব্যবহার
echo "$(cat input.txt)"
এটি সঠিকভাবে কাজ করবে।
সম্ভবত প্রতিধ্বনির ইনপুটটি নিউলাইনগুলি দ্বারা পৃথক করা হয়েছে এবং এটি এটি পৃথক কমান্ড হিসাবে পরিচালনা করবে, সুতরাং ফলাফলটি নিউলাইনগুলি ছাড়াই হবে।
echo "$(date) something"
, তারিখের আউটপুট থেকে ট্রেলিং করা নতুন লাইনটি দূরে সরিয়ে, সেই প্রতিধ্বনিটিকে তারিখ এবং একই লাইনে "কিছু" তৈরি করার সুবিধা রয়েছে। আপনার যদি কোনও ফাইল বা কমান্ড আউটপুট "যেমন আছে", সংরক্ষণ করতে হয় তবে ম্যাপফল ( help mapfile
) ব্যবহার করুন read -rd ''
বা কিছুক্ষণ পঠন-লুপ ব্যবহার করুন।
বাশ ম্যানুয়াল পৃষ্ঠা, বিভাগ থেকে উদ্ধৃত Command Substitution
:
এম্বেড করা নতুনলাইনগুলি মুছে ফেলা হয় না তবে শব্দ বিভাজনের সময় সেগুলি মুছে ফেলা হতে পারে।
আরেকটু এগিয়ে, একই বিভাগ:
প্রতিস্থাপনটি যদি ডাবল উদ্ধৃতিগুলির মধ্যে উপস্থিত হয়, তবে শব্দ বিভাজন এবং পথের নাম সম্প্রসারণ ফলাফলগুলিতে করা হয় না।
এই জন্য echo "$(cat /etc/passwd)"
কাজ করে।
অতিরিক্তভাবে, একটি সচেতন হওয়া উচিত, POSIX স্পেসিফিকেশন দ্বারা আদেশ কমান্ড প্রতিস্থাপন নতুন লাইনের লাইন অপসারণ:
$ echo "$(printf "one\ntwo\n\n\n")"
one
two
সুতরাং, এর মাধ্যমে একটি ফাইল আউটপুট আউট করা $(cat file.txt)
নতুন লাইনের ক্ষতি হতে পারে এবং পুরো ফাইলের সততা যদি অগ্রাধিকার পায় তবে এটি সমস্যা হতে পারে।
আপনি নিউলাইনগুলি সংরক্ষণ করতে পারেন, উদাহরণস্বরূপ আইএফএসকে খালি সেট করে:
$ IFS=
$ a=$(cat links.txt)
$ echo "$a"
link1
link2
link3