কারণ আমি এর জন্য পড়েছি, আমি একটি নোট ফেলে দিতে চাই। আমি এই থ্রেডটি পেয়েছি কারণ পসিক্স সামঞ্জস্যপূর্ণ হওয়ার জন্য আমাকে একটি পুরানো শ স্ক্রিপ্টটি আবার লিখতে হবে। এর মূল অর্থ POSIX দ্বারা প্রবর্তিত পাইপ / সাবশেল সমস্যাটিকে এ জাতীয় কোড লিখে পুনরায় লেখার দ্বারা বিরত করা:
some_command | read a b c
মধ্যে:
read a b c << EOF
$(some_command)
EOF
এবং কোড এর মত:
some_command |
while read a b c; do
# something
done
মধ্যে:
while read a b c; do
# something
done << EOF
$(some_command)
EOF
তবে পরেরটি খালি ইনপুটতে একই আচরণ করে না। পুরানো স্বরলিপি সহ যখন লুপটি খালি ইনপুটটিতে প্রবেশ করা হয় না, তবে পসিক্স স্বরলিপিতে এটি হয়! আমি মনে করি এটি EOF এর আগে নতুন লাইনের কারণে, যা বাদ দেওয়া যায় না। পুসি কোডটি পুরানো স্বরলিপিটির মতো আরও আচরণ করে যা দেখে মনে হয়:
while read a b c; do
case $a in ("") break; esac
# something
done << EOF
$(some_command)
EOF
বেশিরভাগ ক্ষেত্রে এটি যথেষ্ট ভাল হওয়া উচিত। তবে দুর্ভাগ্যক্রমে এটি এখনও পুরানো স্বরলিপিটির মতো হুবহু আচরণ করে না যদি কিছু_কম্যান্ড একটি ফাঁকা লাইন প্রিন্ট করে। পুরানো স্বরলিপিটিতে দেহটি কার্যকর করা হয় এবং পসিক্স স্বরলিপিতে আমরা দেহের সামনে ভাঙি।
এটির সমাধানের জন্য একটি পদ্ধতির মতো দেখতে এটি হতে পারে:
while read a b c; do
case $a in ("something_guaranteed_not_to_be_printed_by_some_command") break; esac
# something
done << EOF
$(some_command)
echo "something_guaranteed_not_to_be_printed_by_some_command"
EOF