সেখানে নেই goto
ব্যাশ হবে।
এখানে কিছু ঘৃণ্য কাজ ব্যবহার করা হচ্ছে trap
যা কেবল পিছনের দিকে ঝাঁপিয়ে পড়ে :)
#!/bin/bash -e
trap '
echo I am
sleep 1
echo here now.
' EXIT
echo foo
goto trap 2> /dev/null
echo bar
আউটপুট:
$ ./test.sh
foo
I am
here now.
এটি সেভাবে ব্যবহার করা উচিত নয়, তবে কেবল শিক্ষামূলক উদ্দেশ্যে। এখানে এটি কেন কাজ করে:
trap
কোড প্রবাহের পরিবর্তন অর্জন করতে ব্যতিক্রম হ্যান্ডলিং ব্যবহার করছে। এই ক্ষেত্রে trap
স্ক্রিপ্টটি প্রস্থান করার জন্য এমন কোনও কিছুই ধরা পড়ছে। কমান্ডটি goto
বিদ্যমান নেই এবং তাই একটি ত্রুটি নিক্ষেপ করে যা সাধারণত স্ক্রিপ্ট থেকে বেরিয়ে আসে। এই ত্রুটিটি ধরা পড়ছে trap
, এবং 2>/dev/null
ত্রুটি বার্তাটি গোপন করে যা সাধারণত প্রদর্শিত হবে।
গোটোর এই প্রয়োগটি অবশ্যই বিশ্বাসযোগ্য নয়, যেহেতু কোনও অস্তিত্বহীন কমান্ড (বা অন্য কোনও ত্রুটি, সেই পদ্ধতিতে) একই ট্র্যাপ কমান্ডটি কার্যকর করে। বিশেষত, কোন লেবেল যেতে হবে তা আপনি চয়ন করতে পারবেন না।
মূলত বাস্তব দৃশ্যে আপনার কোনও গোটো স্টেটমেন্টের প্রয়োজন হয় না, এগুলি বিভিন্ন স্থানে র্যান্ডম কলগুলি কেবল আপনার কোড বোঝা মুশকিল হিসাবে নিরর্থক।
যদি আপনার কোডটি বহুবার আহ্বান করা হয়, তবে লুপটি ব্যবহার করতে continue
এবং এর কার্যপ্রবাহটি ব্যবহার করার জন্য এবং এর জন্য বিবেচনা করুন break
।
যদি আপনার কোডটি স্ব-পুনরাবৃত্তি করে তবে ফাংশনটি লিখতে এবং এটি যতবার ইচ্ছা কল করুন।
যদি আপনার কোডটি ভেরিয়েবল ভ্যালুর উপর ভিত্তি করে নির্দিষ্ট বিভাগে ঝাঁপিয়ে পড়ার প্রয়োজন হয় তবে case
বিবৃতিটি ব্যবহার করে বিবেচনা করুন ।
আপনি যদি নিজের লম্বা কোডটিকে ছোট ছোট টুকরো টুকরো করে আলাদা করতে পারেন তবে এটিকে পৃথক ফাইলে স্থানান্তরিত করার বিষয়ে বিবেচনা করুন এবং তাদের মূল স্ক্রিপ্ট থেকে কল করুন।
goto
বাশে নেই (অন্তত এটি আমারcommand not found
জন্য বলে ) কেন? সম্ভাবনা রয়েছে এটি করার আরও ভাল উপায়।