বাশ কেন cat n কে cat (বিড়াল ফাইল) সরায়?


24

আমার কাছে যদি ফাইলটি থাকে input.txt:

hello
world
!

তারপরে bash কমান্ড কার্যকর করে এটি echo $(cat input.txt)আউটপুট দেয়:

hello world !

কেন এবং কীভাবে আমি এটির আউটপুট ঠিক করতে পারি যে ফাইলটিতে এটি কীভাবে রয়েছে?

উত্তর:


32

আপনি যদি ব্যবহার

echo "$(cat input.txt)"

এটি সঠিকভাবে কাজ করবে।

সম্ভবত প্রতিধ্বনির ইনপুটটি নিউলাইনগুলি দ্বারা পৃথক করা হয়েছে এবং এটি এটি পৃথক কমান্ড হিসাবে পরিচালনা করবে, সুতরাং ফলাফলটি নিউলাইনগুলি ছাড়াই হবে।


নিস! সুতরাং $ () এবং ব্যাকটিক্সের মধ্যে পার্থক্য (যদি থাকে) কী? (দুঃখিত যদি এটি খুব স্পর্শকাতর হয়)
চ্যান-হো সুহ

তারা সমতুল্য,। (...) বাসা বাঁধাই সহজ except উভয় ক্ষেত্রেই, আপনি যদি ফলাফলটি উদ্ধৃত না করেন তবে এটি সাদা স্থানের একাধিক যুক্তিতে পরিণত হবে।
জেমস হেনস্ট্রিজ

3
তবে চূড়ান্ত নিউলাইন চরিত্রটি বাদ দেওয়া হয়, এমনকি ডাবল উদ্ধৃতিতেও। বিপরীতে, পার্লের ব্যাকটিক অপারেটর সমস্ত নতুনলাইন সহ কমান্ডের পুরো আউটপুটে প্রসারিত করে।
কিথ থম্পসন

6
@ কিথথম্পসন হ্যাঁ, কমান্ড প্রতিস্থাপন আউটপুট থেকে সমস্ত অনুসরণযোগ্য নিউলাইনগুলি সরিয়ে দেয়। উদাহরণস্বরূপ echo "$(date) something", তারিখের আউটপুট থেকে ট্রেলিং করা নতুন লাইনটি দূরে সরিয়ে, সেই প্রতিধ্বনিটিকে তারিখ এবং একই লাইনে "কিছু" তৈরি করার সুবিধা রয়েছে। আপনার যদি কোনও ফাইল বা কমান্ড আউটপুট "যেমন আছে", সংরক্ষণ করতে হয় তবে ম্যাপফল ( help mapfile) ব্যবহার করুন read -rd ''বা কিছুক্ষণ পঠন-লুপ ব্যবহার করুন।
গিরিহা

সবাইকে ধন্যবাদ :-) আমি এখানে প্রতিটি মন্তব্য থেকে কিছু শিখেছি!
চান-হো সুহ

2

বাশ ম্যানুয়াল পৃষ্ঠা, বিভাগ থেকে উদ্ধৃত Command Substitution:

এম্বেড করা নতুনলাইনগুলি মুছে ফেলা হয় না তবে শব্দ বিভাজনের সময় সেগুলি মুছে ফেলা হতে পারে।

আরেকটু এগিয়ে, একই বিভাগ:

প্রতিস্থাপনটি যদি ডাবল উদ্ধৃতিগুলির মধ্যে উপস্থিত হয়, তবে শব্দ বিভাজন এবং পথের নাম সম্প্রসারণ ফলাফলগুলিতে করা হয় না।

এই জন্য echo "$(cat /etc/passwd)" কাজ করে।

অতিরিক্তভাবে, একটি সচেতন হওয়া উচিত, POSIX স্পেসিফিকেশন দ্বারা আদেশ কমান্ড প্রতিস্থাপন নতুন লাইনের লাইন অপসারণ:

$ echo "$(printf "one\ntwo\n\n\n")"
one
two

সুতরাং, এর মাধ্যমে একটি ফাইল আউটপুট আউট করা $(cat file.txt)নতুন লাইনের ক্ষতি হতে পারে এবং পুরো ফাইলের সততা যদি অগ্রাধিকার পায় তবে এটি সমস্যা হতে পারে।


2

আপনি নিউলাইনগুলি সংরক্ষণ করতে পারেন, উদাহরণস্বরূপ আইএফএসকে খালি সেট করে:

$ IFS=
$ a=$(cat links.txt)
$ echo "$a"
link1
link2
link3
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.