প্রক্রিয়া প্রতিস্থাপনের জন্য সঠিক স্বরলিপিটি হ'ল:
while read i; do echo $i; done < <(echo "$FILECONTENT")
i
লুপে নির্ধারিত শেষের মানটি তখন লুপটি শেষ হয়ে যায়। একটি বিকল্প হ'ল:
echo $FILECONTENT |
{
while read i; do echo $i; done
...do other things using $i here...
}
ধনুর্বন্ধনী একটি আই / ও গ্রুপিং অপারেশন এবং তারা নিজেরাই একটি সাব-শেল তৈরি করে না। এ প্রসঙ্গে তারা একটি পাইপলাইন অংশ এবং সেই কারণে একটি subshell হিসাবে চালানো হয়, কিন্তু কারণ হল |
, না { ... }
। আপনি প্রশ্নের মধ্যে এটি উল্লেখ। আফাইক, আপনি কোনও ফাংশনের অভ্যন্তরে এগুলি থেকে ফিরে আসতে পারেন।
বাশ shopt
বিল্টিনও সরবরাহ করে এবং এর অনেকগুলি বিকল্পগুলির মধ্যে একটি:
lastpipe
যদি সেট করা থাকে এবং জব নিয়ন্ত্রণ সক্রিয় না থাকে, শেলটি বর্তমান শেল পরিবেশে পটভূমিতে কার্যকর করা হয়নি এমন পাইপলাইনের শেষ কমান্ডটি চালায়।
সুতরাং, স্ক্রিপ্টে এর মতো কিছু ব্যবহার করা sum
লুপের পরে সংশোধিতকে উপলব্ধ করে:
FILECONTENT="12 Name
13 Number
14 Information"
shopt -s lastpipe
sum=0
echo "$FILECONTENT" |
while read number name; do ((sum+=$number)); done
echo $sum
কমান্ড লাইনে এটি করা সাধারণত 'জব নিয়ন্ত্রণ সক্রিয় নয়' (অর্থাত্ কমান্ড লাইনে, কাজের নিয়ন্ত্রণ সক্রিয়) বাজে চালায়। স্ক্রিপ্ট ব্যবহার না করে এটি পরীক্ষা করা ব্যর্থ।
এছাড়াও, তার উত্তরে গ্যারেথ রিস দ্বারা উল্লিখিত হিসাবে আপনি কখনও কখনও এখানে স্ট্রিং ব্যবহার করতে পারেন :
while read i; do echo $i; done <<< "$FILECONTENT"
এটির প্রয়োজন হয় না shopt
; আপনি এটি ব্যবহার করে কোনও প্রক্রিয়া সংরক্ষণ করতে সক্ষম হতে পারেন।