যদি না হয় (), সিনট্যাক্সটি সত্যিই অস্পষ্ট হবে।
একটি ফাংশন সংজ্ঞায়িত করার জন্য কিছু দ্ব্যর্থহীন বাক্য গঠন থাকতে হবে এবং অন্যান্য শেল সিনট্যাক্সকে যথেষ্ট পরিবর্তন না করে এটি এমন হতে পারে না:
do_something {
# one or more commands go here
}
আপনি বলেছিলেন এটি "এটির বর্তমান সিনট্যাক্স নিয়ে সঙ্কট সৃষ্টি করে না", তবে তা করে! লক্ষ্য করুন যে আপনি যখন এর প্রথম লাইনটি চালানোর চেষ্টা করবেন তখন কোনও ধরণের সিনট্যাক্স ত্রুটি পাবেন না । আপনি একটি ত্রুটি পান, তবে এটি সিনট্যাক্স সম্পর্কে কোনও ত্রুটি নয়। দ্বিতীয় লাইনটি সহ }একটি বাক্য গঠন ত্রুটি, তবে প্রথম লাইনটি এটি নয়। পরিবর্তে, do_something {ডাকা একটি কমান্ড চালানোর চেষ্টা করে do_somethingএবং {সেই আদেশের তর্ক হিসাবে পাস করার চেষ্টা করুন :
$ do_something {
do_something: command not found
যদি ইতিমধ্যে কোনও আদেশ পাওয়া যায় তবে do_somethingআপনি এটি চালাচ্ছেন। যদি ইতিমধ্যে কোনও ফাংশন বলা হয় do_something, আপনি এটি কল করছেন । এটি সাধারণভাবে সিনট্যাক্সটি দ্ব্যর্থহীন হওয়া গুরুত্বপূর্ণ, তবে এটি বিশেষভাবে গুরুত্বপূর্ণ যে এটির পরিবর্তে কোনও ক্রিয়াকলাপ না বলা ছাড়া কোনও ক্রিয়াকে নতুন করে সংজ্ঞা দেওয়া সম্ভব specifically কোনও ফাংশন সংজ্ঞায়িত করা এবং এটি কল করা একই দেখতে পাওয়া উচিত নয়।
শেলটি কীভাবে আচরণ করে {এবং (।
হিসাবে type {আপনি বলতে হবে, {একটি শেল কীওয়ার্ড। এটি এটি পছন্দ করে [[। এমন পরিস্থিতিতে ব্যবহার করা হয় যেখানে এটি অন্যথায় কমান্ড হতে পারে, {বিশেষ শব্দার্থক বহন করে। বিশেষত, এটি কমান্ড গ্রুপিং সম্পাদন করে। তবে অন্যান্য পরিস্থিতিতে এটি আক্ষরিক {চরিত্র বোঝাতে অনস্কেপড ব্যবহার করা যেতে পারে । এর মধ্যে এটি কোনও কমান্ডের দ্বিতীয় বা পরবর্তী শব্দ হিসাবে পাস করার পরিস্থিতি অন্তর্ভুক্ত।
অবশ্যই, ব্যাশ পারে চিকিত্সা পরিকল্পিত হয়েছে {ভিন্নভাবে তুলনায় এটি বর্তমানে আছে। তবে, এর সিনট্যাক্সটি আর পসিক্স শেলের সাথে সামঞ্জস্যপূর্ণ হবে না এবং বাশ সত্যই বোর্ন-স্টাইলের শেল হবে না এবং অনেকগুলি শেল স্ক্রিপ্ট চালাতে সক্ষম হবে না।
বিপরীতে, (একটি শেল মেটাচার্যাক্টর। এটা সবসময় বিশেষভাবে চিকিত্সা করা হয় যদি এটি একটি কমান্ড প্রদর্শিত হবে এবং উদ্ধৃত করা হয় না (সঙ্গে ' ', " "অথবা \)। সিনট্যাক্সে এইভাবে কোনও অস্পষ্টতা নেই:
do_something() {
# one or more commands go here
}
এর অর্থ আর কিছু হতে পারে না। যদি বাশের ফাংশন না থাকে, তবে এটি সিন্ট্যাক্স ত্রুটি হবে, একই কারণে echo foo(bar)একটি সিনট্যাক্স ত্রুটি।
আপনি যদি ()স্বরলিপিটি সত্যিই অপছন্দ করেন তবে আপনি কীওয়ার্ডটি ব্যবহার করতে functionএবং এটি বাদ দিতে পারেন, যেমন সুডডাস উল্লেখ করেছেন । নোট করুন যে এটি বোর্ন-স্টাইলের বেশিরভাগ শেলগুলিতে ফাংশনগুলি সংজ্ঞায়িত করার জন্য সিনট্যাক্সের অংশ নয় - এবং কিছুতে এটি সমর্থিত তবে ফাংশনগুলির সেইরকমভাবে সংজ্ঞায়িত করা হয়েছে আলাদা শব্দার্থক - এবং সুতরাং এটি ব্যবহার করা একটি স্ক্রিপ্ট পোর্টেবল হবে না। (এই বাক্য গঠনটি দ্ব্যর্থহীন হতে সক্ষম হওয়ার কারণ এটি functionবাশের নিজেই একটি মূলশব্দ যা এটি নির্দেশ করে যে এটি যা কিছু অনুসরণ করে এটি একটি ফাংশন সংজ্ঞার সূচনা))
পরিশেষে, নোট করুন যে বেশিরভাগ ফাংশন সংজ্ঞা {অনুশীলনে ব্যবহার করার সময় কোনও যৌগিক কমান্ডের অনুমতি দেওয়া হয়। আপনার যদি এমন কোনও ফাংশন থাকে যার দেহটি আপনি সর্বদা সাবশেলে চালাতে চেয়েছিলেন তবে আপনি এটির ( )পরিবর্তে ব্যবহার করতে পারেন { }।