উত্তর:
সহজ উত্তর হ'ল কারণ ksh সেইভাবে লেখা (এবং বাশ সামঞ্জস্যপূর্ণ)। তবে সেই নকশা নির্বাচনের জন্য একটি কারণ রয়েছে।
বেশিরভাগ কমান্ডগুলি পাঠ্য ইনপুট আশা করে। ইউনিক্স বিশ্বে, একটি পাঠ্য ফাইলটিতে প্রতিটি লাইনের শেষে থাকে, প্রতিটি লাইনে থাকে । সুতরাং বেশিরভাগ ক্ষেত্রে একটি চূড়ান্ত নিউলাইন প্রয়োজন। একটি সাধারণ ক্ষেত্রে হ'ল একটি কমান্ড সসবিটিউটিউশন দ্বারা একটি কমান্ডের আউটপুট দখল করা, এটি কোনও উপায়ে প্রক্রিয়া করা, এবং পরে এটি অন্য কমান্ডে প্রেরণ করা। কমান্ড প্রতিস্থাপন চূড়ান্ত নতুন লাইনে ফেলা; <<<
একটি পিছনে রাখে।
tmp=$(foo)
tmp=${tmp//hello/world}
tmp=${tmp#prefix}
bar <<<$tmp
বাশ এবং কেএসএস যাইহোক বাইনারি ডেটা ম্যানিপুলেট করতে পারে না (এটি নাল অক্ষরগুলির সাথে মোকাবেলা করতে পারে না), তাই অবাক হওয়ার মতো বিষয় নয় যে তাদের সুবিধাগুলি টেক্সট ডেটার দিকে এগিয়ে গেছে।
<<<
এখানে স্ট্রিং সিনট্যাক্স মত যাহাই হউক না কেন শুধু সুবিধার জন্য বেশিরভাগই হয়, <<
এখানে-দস্তাবেজ। আপনার যদি কোনও চূড়ান্ত নিউলাইন যোগ করার প্রয়োজন না হয় তবে echo -n
(ব্যাশে) বা printf
একটি পাইপলাইন ব্যবহার করুন।
<<<
দ্বারা বোর্ন বিশ্বের চালু করা হয় zsh
, না ksh
। এবং এটা ইউনিক্স বন্দর একটি অনুরূপ অপারেটর দ্বারা অনুপ্রাণিত হয় rc
যা হয়নি না যে অতিরিক্ত newline অক্ষর যোগ করুন। মজার বিষয় হল, =(<<<text)
অপারেটর সেই নতুন লাইনে যুক্ত করে না zsh
।
printf
ইত্যাদি) টেলিং নতুন লাইনে এড়ানো bash
? @ স্টাফেন চ্যাজেলাস পয়েন্টের মতো এটিই সম্ভব zsh
।
মোড সক্রিয় read
থাকাকালীন কমান্ডটি ব্যবহার করার সময় একটি দৃশ্যে এটি-স্ট্রিংগুলিতে নতুন লাইন যুক্ত হওয়া ব্যবহারিক set -e
। স্মরণ করুন যে set -e
কোনও স্ক্রিপ্টের অবসান ঘটায় যখন এটি (আরও বা কম) এমন বিবৃতিগুলির মুখোমুখি হয় যা একটি শূন্য নয় এমন স্থিতি কোড উত্পন্ন করে। বিবেচনা করুন যে read
যখন নিউলাইন ছাড়াই স্ট্রিংয়ের মুখোমুখি হয় তখন একটি নন-শূন্য স্থিতি কোড উত্পন্ন করে:
#!/bin/bash
set -e
# The following statement succeeds because here-strings append a newline:
IFS='' read -r <<< 'newline appended'
echo 'Made it here'
# The following statement fails because 'read' returns a non-zero status
# code when no newlines are encountered.
printf 'no newline' | IFS='' read -r
echo 'Did not make it here'
আমি মনে করি যে এখানে স্ট্রিংয়ের শেষে একটি নতুন লাইন পাওয়ার একমাত্র উপায়, প্রমাণ:
xxd <<<`echo -ne "a\n"`
এটি প্রদর্শিত হবে যে এখানে স্ট্রিং অপারেটর আপনাকে নতুন জমা দেওয়া সিনট্যাক্সে দেওয়া না হলে নিউলাইনগুলি স্ট্রিপ করে in
xxd <<<$(echo a)
।