বাশ ফাংশনে রিটার্ন এবং প্রস্থানের মধ্যে পার্থক্য


429

প্রস্থান কোডের ক্ষেত্রে বাশ ফাংশনগুলিতে returnএবং exitস্টেটমেন্টের মধ্যে পার্থক্য কী ?


55
প্রতিলিপি: help <command>শেল বিল্টিন কী করবে তার তথ্য পেতে আপনার শেলটি টাইপ করুন। আপনার ক্ষেত্রে help returnএবংhelp exit
সিজেএক্স

উত্তর:


318

থেকে man bashউপর return [n];

কোনও ক্রিয়াকলাপ কার্যকর করা বন্ধ করে এবং তার দ্বারা কলকারীকে n দ্বারা নির্দিষ্ট করা মানটি ফেরত দেয়। যদি এন বাদ দেওয়া হয় তবে ফাংশন বডিতে শেষ আদেশটি কার্যকর করা হবে বলে প্রত্যাবর্তন স্থিতি।

... চালু exit [n]:

এন এর একটি স্ট্যাটাস দিয়ে শেলটি প্রস্থান করার কারণ দিন। যদি n বাদ দেওয়া হয় তবে প্রস্থান স্থিতি হ'ল শেষ আদেশটি কার্যকর করা হয়। শেলটি শেষ হওয়ার আগে এক্সআইটি-তে একটি ফাঁদ কার্যকর করা হয়।

সম্পাদনা করুন:

আপনার প্রশ্নের সম্পাদনা অনুসারে, প্রস্থান কোডগুলি সম্পর্কে প্রস্থান কোডগুলির returnসাথে কোনও সম্পর্ক নেই। প্রস্থান কোডগুলি ক্রিয়াকলাপ নয়, অ্যাপ্লিকেশন / স্ক্রিপ্টগুলির উদ্দেশ্যে । সুতরাং এই ক্ষেত্রে, একমাত্র কীওয়ার্ড যা স্ক্রিপ্টের প্রস্থান কোড নির্ধারণ করে (যেটি $?শেল ভেরিয়েবল ব্যবহার করে কলিং প্রোগ্রামের দ্বারা ধরা যেতে পারে ) exit

সম্পাদনা 2:

আমার শেষ বিবৃতি উল্লেখ exitকরে কিছু মন্তব্য ঘটছে। আলাদা হয়েছিল returnএবং exitও.পি. বোঝার জন্য, এবং আসলে, এ কোন একটি প্রোগ্রাম / শেল স্ক্রিপ্ট দেওয়া পয়েন্ট, exitকলিং প্রক্রিয়া করতে আপনার একটি প্রস্থান কোড সহ স্ক্রিপ্ট বিভক্তি একমাত্র উপায়।

প্রতিটি কমান্ড শেলের মধ্যে মৃত্যুদন্ড কার্যকর একটি স্থানীয় "প্রস্থান কোড" উত্পাদন করে: এটা সেট করে $?যে কোড পরিবর্তনশীল, এবং ব্যবহার করা যেতে পারে if, &&এবং শর্তসাপেক্ষে অন্যান্য অপারেটরদের অন্যান্য কমান্ডগুলো।

এই প্রস্থান কোডগুলি (এবং $?ভেরিয়েবলের মান) প্রতিটি কমান্ড প্রয়োগের মাধ্যমে পুনরায় সেট করা হয়।

ঘটনাক্রমে, স্ক্রিপ্ট দ্বারা সম্পাদিত শেষ কমান্ডের প্রস্থান কোডটি কলিং প্রক্রিয়া দ্বারা প্রদর্শিত স্ক্রিপ্টের নিজেই প্রস্থান কোড হিসাবে ব্যবহৃত হয়।

অবশেষে, ফাংশনগুলি, যখন ডাকা হয়, প্রস্থান কোডের সাথে শেল কমান্ড হিসাবে কাজ করে। ফাংশনের প্রস্থান কোড (ফাংশনের মধ্যে ) ব্যবহার করে সেট করা হয়েছে return। সুতরাং যখন একটি ফাংশন return 0চালানো হয়, ফাংশন সম্পাদন সমাপ্ত হয়, 0 এর একটি প্রস্থান কোড দেয়।


10
বেপারটা এমন না. এটি সর্বদা বর্তমান শেল থেকে একটি মান ফেরত দেয়। আপনি কোনও ফাংশনের অভ্যন্তরে রয়েছেন কিনা তা বিবেচ্য নয়।
দিয়েগো সেভিলা

10
আপনার সম্পাদনা সম্পর্কে মন্তব্য: আমি হয়ত রিটার্ন মানগুলি এবং প্রস্থান কোডগুলি বিভ্রান্ত করতে পারি তবে func(){ return 50; };func;echo $?50 প্রতিধ্বনিত হয় So সুতরাং $?শেল ভেরিয়েবলটি সীমাবদ্ধ বলে মনে হয় না exit
লেকোডস্পোর্টিফ

8
" $?সর্বাধিক সম্পাদিত সম্পাদিত অগ্রভাগের পাইপলাইনটির প্রস্থান স্থিতিতে প্রসারিত হয়" " সেই প্রস্থানটি শেল থেকে কল আকারে exit(বা স্ক্রিপ্টের শেষে আঘাত করা) আকারে বা returnকোনও ফাংশনের মধ্যে কল আকারে হতে পারে।
সিজেএক্স

11
টুইটারে $? বর্তমান প্রক্রিয়া / স্ক্রিপ্টটিexit এই স্ক্রিপ্ট দ্বারা সম্পাদিত শেষ কমান্ডের ফলাফলের মধ্যেই সীমাবদ্ধ is সুতরাং, যদি আপনার শেষ স্ক্রিপ্ট লাইনটি সেই ফাংশনটিতে কল হয় এবং সেই ফাংশনটি 50 টি প্রত্যাবর্তন করে, হ্যাঁ, $?আপনি যে প্রক্রিয়াটিতে আপনাকে উত্পাদন করেছেন এটি 50 হয় However তবে যাইহোক, এটির সাথে কোনও সম্পর্ক নেই returnকারণ এটি হ'ল বর্তমান স্ক্রিপ্টে সীমাবদ্ধ। কেবলমাত্র এই ফাংশন কলটি স্ক্রিপ্টের শেষ বাক্য হলে তা ফেরত আসবে। exitতবে, সর্বদা স্ক্রিপ্ট শেষ করুন এবং $? কলিং প্রক্রিয়া হিসাবে সেই মানটি ফিরিয়ে দিন ।
দিয়েগো সেভিলা

11
আমাকে এই লাইনে বিভ্রান্ত করার জন্য " returnপ্রস্থান কোডগুলির সাথে কোনও সম্পর্ক নেই।" পরীক্ষা আমাকে বলে যে কোনও ফাংশনের রিটার্ন কোড এবং স্ক্রিপ্টের প্রস্থান কোডের মধ্যে কোনও কার্যকরী পার্থক্য নেই।
জ্যাক

296

returnবর্তমান ফাংশনটি সুযোগের বাইরে চলে যাবে, যখন exitস্ক্রিপ্টটি বলা হয় সেখানেই শেষ হবে। এটি ব্যাখ্যা করার জন্য এখানে একটি নমুনা প্রোগ্রাম রয়েছে:

#!/bin/bash

retfunc()
{
    echo "this is retfunc()"
    return 1
}

exitfunc()
{
    echo "this is exitfunc()"
    exit 1
}

retfunc
echo "We are still here"
exitfunc
echo "We will never see this"

আউটপুট

$ ./test.sh
this is retfunc()
We are still here
this is exitfunc()

17
চমৎকার উদাহরণ। আপনি 1 ইন-এর প্রস্থান মূল্যও প্রদর্শন করতে পারেন $?
দিয়েগো সেভিলা

48
মনে রাখবেন যে আপনি "retfunc" এ কল করার আগে "সেট-ই" যুক্ত করলে এই ফাংশনটি "আমরা এখনও আছি" মুদ্রণ করবে না।
মাইকেল 23

4
তবে, echo fnord | while read x; do exitfunc; done; echo "still here""এখনও এখানে" মুদ্রণ করা হবে। মনে হচ্ছে whileএই দৃশ্যে কেবলমাত্র উপ-শেলটি প্রস্থান করা হয়েছে।
ট্রিপলি

একটি আনুমানিক কর্মসংস্থান done || exit $?কিন্তু এটি কুরুচিপূর্ণ এবং সুনির্দিষ্ট সমতুল্য নয়।
ট্রিপলি

2
+1 এটি যুক্ত করতে কার্যকর হতে পারে: `` returnthe বর্তমান ফাংশন বা উত্সাহিত স্ক্রিপ্টটি সুযোগের বাইরে চলে যাবে ```
ইসহাক

56

আমি মনে করি না কেউ এই প্রশ্নের পুরোপুরি সত্যই উত্তর দিয়েছে কারণ তারা কীভাবে দুটি ব্যবহার করা হয় তা বর্ণনা করে না। ঠিক আছে আমি মনে করি আমরা জানি যে প্রস্থানটি স্ক্রিপ্টটিকে হত্যা করে, যেখানে কখনও এটি বলা হয় এবং আপনি এটিতে একটি স্থিতি নির্ধারণ করতে পারেন যেমন প্রস্থান বা প্রস্থান 0 বা প্রস্থান 7 এবং আরও অনেক কিছু। এটি অন্য স্ক্রিপ্ট ইত্যাদি দ্বারা কল করলে স্ক্রিপ্টটি কীভাবে থামাতে বাধ্য হয়েছিল তা নির্ধারণ করতে ব্যবহার করা যেতে পারে ইত্যাদি প্রস্থান করার সময় যথেষ্ট।

যখন ডাকা হয় প্রত্যাবর্তন ফাংশনটির আচরণ, সাধারণত একটি 1 বা একটি 0. নির্দেশিত মানটি ফিরিয়ে দেয় example উদাহরণস্বরূপ:

    #!/bin/bash
    isdirectory() {
      if [ -d "$1" ]
      then
        return 0
      else
        return 1
      fi
    echo "you will not see anything after the return like this text"
    }

এই মত চেক করুন:

    if isdirectory $1; then echo "is directory"; else echo "not a directory"; fi

বা এই মত:

    isdirectory || echo "not a directory"

এই উদাহরণে, পরীক্ষাটি ডিরেক্টরিটি পাওয়া গেছে কিনা তা নির্দেশ করতে ব্যবহার করা যেতে পারে। লক্ষ্য করুন যে ফিরতি পরে কিছু কার্য সম্পাদন করা হবে না। 0 টি সত্য তবে শেলের মধ্যে 1 টি মিথ্যা, অন্যান্য অগ্রগতির চেয়ে পৃথক।

ফাংশন সম্পর্কিত আরও তথ্যের জন্য: http : //www.linuxj Journal.com/content/return-values-bash-funtions

দ্রষ্টব্য: আইসডিরেক্টরি ফাংশন কেবল নির্দেশমূলক উদ্দেশ্যে for আপনি আসল স্ক্রিপ্টে এই জাতীয় বিকল্পটি কীভাবে সম্পাদন করবেন এটি এমন হওয়া উচিত নয়।


3
বা কেবল test -d $1একই ফলাফল অর্জন করতে ব্যবহার করুন । কখনই করবেন না if <check> return else return<check>আমি জানি কমপক্ষে সমস্ত ভাষায় একই কাজ করবে।
এরিকবার্ক

4
এরিক যা বলছে তা আরও স্পষ্ট করে বলার জন্য: isdirectory() { [ -d "$1" ]; }আপনার এখানে যেমন রয়েছে ঠিক তেমন আচরণ করবে: শেল ফাংশনের ডিফল্ট রিটার্ন মান, তার কোডের শেষে পৌঁছানো বা returnকোনও যুক্তি ছাড়াই, তা হ'ল অতি সাম্প্রতিক কমান্ড।
চার্লস ডাফি

11
এখানের অন্যান্য মন্তব্যকারীরা মাইক কিউর উদাহরণের স্টাইলে সমালোচনা করছেন, যখন সত্যই তিনি returnবিবৃতিটির আচরণের কথা বলছেন । এটি সত্য যে তাঁর উদাহরণটি সরল এবং উত্পাদন ব্যবহারে ব্যবহৃত হবে না। তবে এটি সহজ, সুতরাং এটি তার কাজটি ঠিকঠাকভাবে সম্পাদন করে। এতে কোনও ভুল নেই।
মাইক এস

ধন্যবাদ মাইক এস, হ্যাঁ আমি সম্মত হই যে সবচেয়ে সহজ উদাহরণটি প্রস্থান বনাম প্রত্যাবর্তনের সর্বোত্তম ব্যাখ্যা দেয়। অন্যান্য মন্তব্য অবশ্যই বৈধ, এবং আরও উন্নত ব্যাশ কোডার জন্য বিবেচনা করা উচিত ;-)
মাইক কিউ

1
কেউ কেউ বলতে পারে যে এটি প্রশ্নের সাথে একেবারেই সম্পর্কিত নয়, তবে এটি যে সমস্যার সাথে আমার এই প্রশ্নটি সন্ধান করতে পরিচালিত করেছিল তার সাথে সম্পর্কিত এবং এর উত্তর দিয়েছিল। :-)
জেসি স্টিল

33

মনে রাখবেন, ফাংশনগুলি কোনও স্ক্রিপ্টের অভ্যন্তরীণ এবং সাধারণত রিটার্ন স্টেটমেন্টটি ব্যবহার করে সেখান থেকে কল করা হয়েছিল। একটি বাহ্যিক স্ক্রিপ্ট কল করা সম্পূর্ণরূপে অন্য একটি বিষয় এবং স্ক্রিপ্টগুলি সাধারণত একটি প্রস্থান বিবৃতি দিয়ে শেষ হয়।

"বহির্গমন কোডের ক্ষেত্রে BASH ফাংশনগুলিতে রিটার্ন এবং প্রস্থান বিবরণীর মধ্যে পার্থক্য" খুব কম। উভয়ই প্রতি স্থিতির মান দেয় না, কোনও স্থিতি ফিরিয়ে দেয় । শূন্যের একটি স্থিতি সাফল্যের ইঙ্গিত দেয়, অন্য কোনও স্থিতি (1 থেকে 255) ব্যর্থতা নির্দেশ করে। রিটার্ন স্টেটমেন্টটি যেখানে বলা হয়েছিল সেখান থেকে স্ক্রিপ্টে ফিরে আসবে, যখন প্রস্থান বিবরণীটি যেখানেই আসবে সেখান থেকে পুরো স্ক্রিপ্টটি শেষ করে দেবে।

return 0  # returns to where the function was called.  $? contains 0 (success).

return 1  # returns to where the function was called.  $? contains 1 (failure).

exit 0  # exits the script completely.  $? contains 0 (success).

exit 1  # exits the script completely.  $? contains 1 (failure).

যদি আপনার ফাংশনটি সহজেই কোনও রিটার্ন বিবৃতি না দিয়ে শেষ হয় তবে মৃত্যুদন্ড কার্যকর করা শেষ কমান্ডের স্ট্যাটাসটি স্ট্যাটাস কোড হিসাবে ফিরে আসে (এবং এতে স্থাপন করা হবে $?)।

মনে রাখবেন, রিটার্ন করে প্রস্থান উপলব্ধ 255 0 থেকে একটি স্থিতি কোড ফেরত দিতে, $?। আপনি স্থিতির কোডে অন্য কোনও জিনিস স্টাফ করতে পারবেন না (যেমন "বিড়াল" ফেরান); এটি কাজ করবে না. তবে, কোনও স্ক্রিপ্ট স্থিতি কোডগুলি ব্যবহার করে ব্যর্থতার জন্য 255 টি ভিন্ন কারণ পিছনে যেতে পারে।

আপনি কলিং স্ক্রিপ্টে থাকা ভেরিয়েবলগুলি সেট করতে পারেন, বা ফাংশনটির প্রতিধ্বনি এবং কলিং স্ক্রিপ্টে কমান্ড প্রতিস্থাপন ব্যবহার করতে পারেন; তবে প্রত্যাবর্তন এবং প্রস্থানের উদ্দেশ্য হ'ল স্থিতি কোডগুলি পাস করা, মান বা গণনার ফলাফল নয় যা সি এর মতো প্রোগ্রামিং ভাষায় প্রত্যাশা করতে পারে not


25

কখনও কখনও, আপনি .বা ব্যবহার করে স্ক্রিপ্ট চালান source

. a.sh

যদি আপনি এর মধ্যে একটি অন্তর্ভুক্ত exitকরেন তবে a.shএটি কেবল স্ক্রিপ্টটি শেষ করবে না, তবে আপনার শেল সেশনটি শেষ করবে।

যদি আপনি এর মধ্যে একটি অন্তর্ভুক্ত returnকরেন তবে a.shএটি স্ক্রিপ্টটি প্রক্রিয়াকরণ বন্ধ করে দেয়।


1
তবে আমি যখন a.sh চালাব তখন আমার একটি ত্রুটি ঘটে return: can only 'return' from a function or sourced scriptযা এটি একটি সাধারণ স্ক্রিপ্টের জন্য অনুপযুক্ত করে তোলে।
পিটার - মনিকা

স্ক্রিপ্টের শীর্ষ স্তরে, উভয়ই allপরিস্থিতিতে উপযুক্ত নয় । সাব-শেল তৈরির পরিবর্তে বর্তমান শেলটিতে স্ক্রিপ্টটি ব্যবহার .বা sourceচালাচ্ছে। স্ক্রিপ্টটি এটি ব্যবহার করতে হয় তা জানতে হবে। যে ব্যবহারকারী এটির বিপরীতে কাজ করে তাদের পক্ষে দুর্ভাগ্য। ব্যক্তিগতভাবে, আমি স্ক্রিপ্টগুলি প্রথমবার চালানোর আগে সেগুলি পড়ার পরামর্শ দিই।
জেসি চিশলম

3
আমি যে অসাধারণ কৌশলটি পেলাম তা হ'ল একটি trapফাংশন ব্যবহার করা ERR EXITএবং তারপরে প্রথমে একটি ব্যর্থ কমান্ডের প্রস্থান কোডটি সংরক্ষণ করুন errCode=$?এবং তারপরে স্ক্রিপ্টটি (উত্সাহিত বা না) দিয়ে বেরিয়ে আসুন return $errCode || exit $errCodeযেখানে ||"যদি আমি ফিরে না আসতে পারি কারণ আমি ফিরে না আসতে পারি কারণ পরিবর্তে কেবল প্রস্থান করুন "।
ড্রাগন 788

6

সহজ কথায় (মূলত কোডিংয়ের ক্ষেত্রে নবাগত), আমরা বলতে পারি,

`return` : exits the function,
`exit()` : exits the program(called as process while running)

এছাড়াও যদি আপনি পর্যবেক্ষণ করেন তবে এটি খুব প্রাথমিক তবে ...

`return` : is the keyword
`exit()` : is the function

1
বাশ স্ক্রিপ্টে, এর exitচেয়ে কম বা কম কোনও ফাংশন নেই return। তারা অন্তর্নির্মিত কমান্ড। এগুলি এমনকি সংরক্ষিত শব্দও নয়।
পিটার - মনিকা পুনরায়

6
  • exitবর্তমান প্রক্রিয়া শেষ ; প্রস্থান কোড সহ বা ছাড়াই, এটিকে কোনও প্রোগ্রাম ফাংশনের চেয়ে বেশি সিস্টেম মনে করুন। মনে রাখবেন যে সোর্সিংয়ের পরে, exitশেলটি শেষ হবে, তবে চলমান সময় কেবল exitস্ক্রিপ্ট হবে।

  • returnকোনও ফাংশন থেকে কলটির পরে কোনও রিটার্ন কোড সহ বা ছাড়াই নির্দেশে ফিরে যান। returnalচ্ছিক এবং এটি ফাংশন শেষে অন্তর্ভুক্ত। returnশুধুমাত্র একটি ফাংশনের ভিতরে ব্যবহার করা যেতে পারে।

আমি এটি যুক্ত করতে চাই যখন এটি উত্সাহিত হওয়ার সময়, exitশেলটি না মেরে কোনও ফাংশন থেকে স্ক্রিপ্টের পক্ষে সহজ নয় । আমি মনে করি, একটি পরীক্ষা 'স্ক্রিপ্ট' স্ক্রিপ্টে আরও ভাল

#!/bin/bash
function die(){
   echo ${1:=Something terrible wrong happen}
   #... clean your trash
   exit 1
}

[ -f /whatever/ ] || die "whatever is not available"
# now we can proceed
echo "continue"

নিম্নলিখিত করছেন:

user$ ./test
Whatever is not available
user$

test -আর - শেলটি বন্ধ হয়ে যাবে।

user$ . ./test
Whatever is not available

কেবলমাত্র testশেষ হবে এবং প্রম্পটটি প্রদর্শিত হবে।

সমাধানটি হ'ল সম্ভাব্য পদ্ধতিটি (এবং এর সাথে সংযুক্ত করা)

#!/bin/bash
function die(){
   echo $(1:=Something terrible wrong happen)
   #... clean your trash
   exit 1
}

( # added        
    [ -f /whatever/ ] || die "whatever is not available"
    # now we can proceed
    echo "continue"
) # added

এখন, উভয় ক্ষেত্রেই কেবল testপ্রস্থান করা হবে।


যুক্ত করা (এবং )সেই অবরুদ্ধটিকে একটি সাব-শেলের মধ্যে রাখে, কার্যকরভাবে .(উত্স) কমান্ডটি অ-করণ করে এমনভাবে দেখা যায় যে আপনি পরীক্ষার স্ক্রিপ্টটি সাধারনত চালিত করেছেন যা একটি সাব-শেলের মধ্যে রয়েছে। যদি স্ক্রিপ্টটি চালিত হয় না .বা sourceতারপরে আপনার কাছে কার্যকরভাবে দুটি সাব-শেল রয়েছে।
জেসি চিশলম

3

ওপির প্রশ্ন: বহির্গমন কোডের ক্ষেত্রে BASH ফাংশনে রিটার্ন এবং প্রস্থান বিবৃতিটির মধ্যে পার্থক্য কী?

পরিষ্কারভাবে, কিছু স্পষ্টকরণ প্রয়োজন:

  • একটি (ফাংশন | শেল) সম্পাদন বন্ধ করতে A (রিটার্ন | প্রস্থান) বিবৃতি প্রয়োজন হয় না। একটি (ফাংশন | শেল) তার কোড তালিকার শেষের দিকে পৌঁছালে শেষ হবে, এমনকি কোনও (প্রত্যাবর্তন | প্রস্থান) বিবৃতি ছাড়াই।
  • একটি (রিটার্ন | প্রস্থান) বিবৃতিতে একটি সমাপ্ত (ফাংশন | শেল) থেকে কোনও মান পাস করার প্রয়োজন হয় না। প্রতিটি প্রক্রিয়া একটি অন্তর্নির্মিত চলক has আছে? যার সর্বদা একটি সংখ্যাগত মান থাকে। এটি একটি বিশেষ পরিবর্তনশীল যা "? = 1" এর মতো সেট করা যায় না, তবে কেবলমাত্র বিশেষ উপায়ে সেট করা হয় (নীচে দেখুন *)। $ এর মান? শেষ কমান্ডটি কার্যকর করার পরে (বলা ফাংশন | সাব শেল) হল সেই মানটি যা (ফাংশন কলার | প্যারেন্ট শেল) এ ফিরে যায়। এটি কার্যকর যে শেষ আদেশটি কার্যকর হয়েছিল ("রিটার্ন [এন]" | "প্রস্থান [এন]") বা প্লেইন ("রিটার্ন" বা অন্য কোনও কিছু যা ডাকা ফাংশন কোডের শেষ কমান্ড হিসাবে ঘটে থাকে)।

উপরের বুলেট তালিকায়, "(x | y)" থেকে সর্বদা প্রথম আইটেম বা সর্বদা দ্বিতীয় আইটেমটি যথাযথভাবে ফাংশন এবং রিটার্ন বা শেলস এবং প্রস্থান সম্পর্কে বিবৃতি পেতে চয়ন করুন।

কী স্পষ্ট হয় যে তারা উভয়ই বিশেষ পরিবর্তনশীল common এর সাধারণ ব্যবহার ভাগ করে নেয়? তারা সমাপ্তির পরে মানগুলি উপরের দিকে প্রেরণ করতে।

* এখন বিশেষ উপায়ে $? সেট করা যেতে পারে:

  • যখন একটি কথিত ফাংশনটি সমাপ্ত হয় এবং তার কলারে ফিরে আসে তখন $? কলারে final এর চূড়ান্ত মান সমান হবে? সমাপ্ত ফাংশন।
  • যখন একটি পিতামাত শেল জড়িত বা স্পষ্টভাবে একটি একক উপ শেলের জন্য অপেক্ষা করে এবং সেই উপ শেলটি সমাপ্ত করে ছেড়ে দেওয়া হয়, তবে $? প্যারেন্ট শেলটি $ এর চূড়ান্ত মানের সমান হবে? সমাপ্ত সাব শেল মধ্যে।
  • কিছু অন্তর্নির্মিত ফাংশন $ সংশোধন করতে পারে? তাদের ফলাফল উপর নির্ভর করে। কিন্তু কিছু না।
  • অন্তর্নির্মিত ফাংশনগুলি "রিটার্ন" এবং "প্রস্থান", যখন একটি সংখ্যাসূচক যুক্তি উভয় দ্বারা অনুসরণ করা হয় $? যুক্তি সহ, এবং কার্যকর করুন।

এটা লক্ষণীয় যে $? সাব শেলের মধ্যে প্রস্থানটি কল করে একটি মান নির্ধারণ করা যেতে পারে:

# (exit 259)
# echo $?
3  

4
যদি কিছু এটি মিস করে তবে চূড়ান্ত প্রস্থান মান একক বাইট হওয়ায় exit 259প্রতিধ্বনিত 3হয়। 259 % 256 = 3
জেসি চিশলম

0

প্রথমত, returnএকটি কীওয়ার্ড এবং exitআমার বন্ধুটি একটি ফাংশন।

এটি বলেছিল, এখানে একটি সহজ ব্যাখ্যা।

return এটি একটি ফাংশন থেকে একটি মান প্রদান করে।

exit এটি বর্তমান শেলটি থেকে বেরিয়ে যায় বা ত্যাগ করে।


আসলে তা না! আপনি যুক্তিযুক্তভাবে ভুল। returnকীওয়ার্ডের সময় প্রস্থানটি একটি ফাংশন । রিটার্ন কেবল প্রস্থান কোডগুলির চেয়ে অনেক বেশি যার কারণে তুলনাটি ন্যায্য নয়।
আহমদ ওবাইস

আমি যে বক্তব্যটি তৈরি করার চেষ্টা করছিলাম সেটি আরও স্পষ্ট করার জন্য এটি সম্পাদনা করেছি। আমাকে এটি করতে সাহায্য করার জন্য ধন্যবাদ।
আহমদ আওইস

4
আমরাও exitনা return"কীওয়ার্ড", বা, ব্যাশ ম্যানুয়াল কল তাদের, "সংরক্ষিত শব্দ" হিসেবে আছে। বাশ ফাংশনের অর্থে কোনও একটিই "ফাংশন" নয়। উভয়ই অন্তর্নির্মিত কমান্ড, বাশ ভাষায়। (সেখানে হয় একটি সি মান গ্রন্থাগার নামক ফাংশন exit(), এবং C প্রোগ্রামিং ভাষা একটি সংরক্ষিত শব্দ return, কিন্তু সেসব ব্যাশ কমান্ড দিয়ে গুলিয়ে ফেলা উচিত নয়, যদিও তাদের শব্দার্থবিদ্যা অদ্ভুতভাবে একই রকম।)
পিটার - পুনর্বহাল মনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.