অন্যান্য উত্তরের সমস্যা হ'ল তারা হয় একটি গ্লোবাল ব্যবহার করেন যা কোনও কল চেইনে থাকা অবস্থায় ওভাররাইট করা যেতে পারে, বা echoযার অর্থ আপনার ফাংশন ডায়াগনস্টিক তথ্য আউটপুট দিতে পারে না (আপনি আপনার ফাংশনটি ভুলে যাবেন এটি এবং "ফলাফল" করবে, অর্থাৎ প্রত্যাবর্তন evalমানটিতে আপনার কলার প্রত্যাশার চেয়ে আরও বেশি তথ্য থাকবে যা অদ্ভুত বাগের দিকে পরিচালিত করবে) বা যা খুব ভারী এবং হ্যাকি।
এটি করার সঠিক উপায় হ'ল শীর্ষ স্তরের জিনিসগুলি কোনও ফাংশনে রাখা এবং localবাশের গতিশীল স্কোপিং বিধি সহ একটি ব্যবহার করা । উদাহরণ:
func1()
{
ret_val=hi
}
func2()
{
ret_val=bye
}
func3()
{
local ret_val=nothing
echo $ret_val
func1
echo $ret_val
func2
echo $ret_val
}
func3
এই ফলাফল
nothing
hi
bye
ডায়নামিক স্কোপিং মানে ret_valকলারের উপর নির্ভর করে কোনও ভিন্ন অবজেক্টের দিকে নির্দেশ করা! এটি লেক্সিকাল স্কোপিং থেকে পৃথক, যা বেশিরভাগ প্রোগ্রামিং ভাষা ব্যবহার করে। এটি আসলে একটি ডকুমেন্টেড বৈশিষ্ট্য , যা সহজেই মিস করা সহজ এবং খুব ভালভাবে ব্যাখ্যা করা যায় না, এটির জন্য ডকুমেন্টেশন এখানে রয়েছে (জোর দেওয়া আমার):
স্থানীয় বিল্টিনের সাথে ফাংশনের স্থানীয় ভেরিয়েবলগুলি ঘোষিত হতে পারে। এই ভেরিয়েবলগুলি কেবল ফাংশনটিতে দৃশ্যমান এবং কমান্ডগুলি এটির অনুরোধ করে ।
সি / সি ++ / পাইথন / জাভা / সি # / জাভাস্ক্রিপ্ট ব্যাকগ্রাউন্ডવાળા কারও পক্ষে এটি সম্ভবত সবচেয়ে বড় প্রতিবন্ধকতা: ব্যাশে ফাংশনগুলি ফাংশন নয়, সেগুলি আদেশ হয় এবং এরূপ আচরণ করে: তারা আউটপুট করতে পারে stdout/ stderr, তারা পাইপ করতে পারে / আউট, তারা একটি প্রস্থান কোড ফিরে আসতে পারে। মূলত স্ক্রিপ্টে একটি কমান্ড সংজ্ঞায়িত করা এবং কমান্ড লাইন থেকে ডাকা যেতে পারে এমন একটি এক্সিকিউটেবল তৈরির মধ্যে কোনও পার্থক্য নেই।
সুতরাং আপনার স্ক্রিপ্টটি এভাবে লেখার পরিবর্তে:
top-level code
bunch of functions
more top-level code
এটি লিখুন:
# define your main, containing all top-level code
main()
bunch of functions
# call main
main
যেখানে হিসাবে main()ঘোষিত ret_valহয় localএবং অন্যান্য সমস্ত ফাংশনগুলির মাধ্যমে মানগুলি ফেরত দেয় ret_val।
নিম্নলিখিত ইউনিক্স এবং লিনাক্স প্রশ্নটিও দেখুন: শেল কার্যক্রমে স্থানীয় চলকগুলির সুযোগ ।
আরেকটি, পরিস্থিতির উপর নির্ভর করে সম্ভবত আরও ভাল সমাধান হ'ল ya.teck দ্বারা পোস্ট করা একটি যা ব্যবহার করে local -n।
returnআপনার ক্ষেত্রে মূলতexit codeযা হয় তা থেকে একই রকম0 - 255।echo@ সেপটি দ্বারা প্রস্তাবিত হিসাবে ব্যবহার করুন । প্রস্থান কোডগুলি ক্যাপচার করা যেতে পারে$?।