নতুন ;&
এবং ;;&
অপারেটরগুলি
4.0 সালে প্রবর্তিত হয়েছিলBash
এবং যদিও তারা উভয়ই একইরকম পরিস্থিতিতে কার্যকর হতে পারে বলে আমি মনে করি তারা আপনার ক্ষেত্রে তাদের কোনও কাজে আসেনি। এই man bash
অপারেটরদের সম্পর্কে এটি যা বলে:
যদি ;; অপারেটর ব্যবহার করা হয়, প্রথম প্যাটার্ন ম্যাচের পরে পরবর্তী কোনও মিলের চেষ্টা করা হয় না। ব্যবহার করে & এর জায়গায় ;; পরবর্তী নিদর্শনগুলির সাথে সংযুক্ত তালিকার সাথে মৃত্যুদন্ড কার্যকর করার কারণ ঘটায়। ব্যবহার করে ;; এর জায়গায় ;; বিবৃতিতে শেলটি পরবর্তী প্যাটার্নের তালিকাটি পরীক্ষা করার কারণ এবং যদি কোনও সফল ম্যাচে সম্পর্কিত কোনও তালিকা সম্পাদন করে।
অন্য কথায়, ;&
এর মাধ্যমে একটি পতনের রয়েছে এবং আমরা এটা থেকে জানি C
এবং
;;&
তোলে bash
অবশিষ্ট মামলা পরিবর্তে থেকে ফিরে চেক
case
সম্পূর্ণভাবে ব্লক। আপনি ;;&
এখানে কর্মের একটি দুর্দান্ত উদাহরণ খুঁজে পেতে পারেন : /programming//a/24544780/3691891 ।
এটি বলা হচ্ছে, আপনার স্ক্রিপ্টে ;&
বা ;;&
ব্যবহার করা যাবে না কারণ তারা উভয়ই গিয়েছিল*)
যে সবসময় চালানো হবে।
নিম্নলিখিত স্ক্রিপ্টটি যুক্তিটিকে পুনরায় ব্যবস্থা না করে আপনি যা চান তা কাজ করে এবং কেবল এটি একটি উদাহরণ হিসাবে বিবেচনা করুন এবং কখনও এর উপর নির্ভর করবেন না এটি খুব ভঙ্গুর। আমি এখান থেকে ধারণা নিয়েছি
:
#!/usr/bin/env bash
function jumpto
{
label=$1
cmd=$(sed -n "/$label:/{:a;n;p;ba};" "$0" | grep -v ':$')
cmd=$(echo "$cmd" | sed 's,;;,,')
cmd=$(echo "$cmd" | sed 's,esac,,')
eval "$cmd"
}
input="foo"
VAR="1"
case $input in
foo)
if [ $VAR = "1" ]; then
printf "perform fallthrough\n"
jumpto ft
else
printf "do not perform fallthrough\n"
fi
;;
*)
ft:
echo "fallthrough worked!"
;;
esac
if [ $VAR -eq 1 ]; then
কোডের কিছু অংশ থেকে যা কিছু আছে তাতে লাফ দেওয়ার চেষ্টা করছেন*)
? কারণ এটি পতনের কথা বলা থেকে সম্পূর্ণ পৃথক, এইভাবে আপনার প্রশ্ন বাক্সটিকে সামান্য বিভ্রান্তিকর করে তোলে।