`$? What কী? এটি কি পরিবর্তনশীল?


23

প্রশ্ন বেশ সোজা এগিয়ে। আমি আগের কমান্ডের প্রস্থান কোডটি ব্যবহার করে পেতে পারি $?। কিন্তু ঠিক এটা কি?

আমি এটি একটি পরিবর্তনশীল বলে মনে করি না, কারণ আপনার পরিবর্তে ভেরিয়েবলের নামে কোনও বিশেষ অক্ষর থাকতে পারে না _

foo?foo=10

ত্রুটির ফলাফল হবে: foo?foo=10: command not found

সুতরাং যদি এটি পরিবর্তনশীল না হয় তবে এটি কী? এর মতো আর কেউ আছে কি?


6
stackoverflow.com/questions/6834487/… এখানে আপনি যান :)
RiddMeT

উত্তর:


23

এটা কি?

$? একটি অন্তর্নির্মিত ভেরিয়েবল যা একটি কমান্ড, ফাংশন বা নিজেই স্ক্রিপ্টের প্রস্থান স্থিতি সংরক্ষণ করে।

$?এক্সিকিউট করা শেষ কমান্ডের প্রস্থান স্থিতি পড়ে। একটি ফাংশন ফিরে আসার পরে, ফাংশনে $?সম্পাদিত শেষ কমান্ডের প্রস্থান স্থিতি দেয়। এটি ফাংশনগুলিকে "রিটার্ন মান" দেওয়ার ব্যাসের উপায়। এটি 0সাফল্যের সাথে বা 1 - 255ত্রুটিযুক্ত সীমার মধ্যে পূর্ণসংখ্যার দিকে ফিরে আসে ।

এটির মতো আরও কি আছে?

হ্যাঁ, ব্যাশে এ জাতীয় বেশ কয়েকটি বিল্ট-ইন ভেরিয়েবল রয়েছে। আপনি এখানে একটি তালিকা দেখতে পারেন । দেখুন: http://www.tldp.org/LDP/abs/html/exit-status.html


1
তাহলে এটি কেবল বাশ শেলের মধ্যেই পাওয়া যায়?
daltonfury42

4
@ daltonfury42 না, কোন শেল যে বোর্ন শেল সঙ্গে কিছু সামঞ্জস্য আছে প্রচেষ্টা এটা সমর্থন করবে (তত্সহ dash, ksh, zshঅন্যান্যের মধ্যে)।
মুরু

2
$status
সিএসএস

22

$?একটি পরিবর্তনশীল তবে একটি বিশেষ, এজন্যই বিশেষ অক্ষরগুলি অনুমোদিত। ($?)সর্বাধিক সম্পাদিত সম্পাদিত অগ্রভাগের পাইপলাইনটির প্রস্থান স্থিতিতে প্রসারিত।

এটি একমাত্র নয়, শেলটি বেশ কয়েকটি পরামিতি বিশেষভাবে বিবেচনা করে। এই পরামিতিগুলি কেবল রেফারেন্স করা যেতে পারে; তাদের নিয়োগের অনুমতি নেই:

Variable    Meaning
$0          Filename of script
$1          Positional parameter #1
$2 - $9     Positional parameters #2 - #9
${10}       Positional parameter #10
$#          Number of positional parameters
"$*"        All the positional parameters (as a single word) *
"$@"        All the positional parameters (as separate strings)
${#*}       Number of positional parameters
${#@}       Number of positional parameters
$?          Return value
$$          Process ID (PID) of script
$-          Flags passed to script (using set)
$_          Last argument of previous command
$!          Process ID (PID) of last job run in background

* Must be quoted, otherwise it defaults to $@.

সূত্র:


2
"$*"কেবলমাত্র একক শব্দের হিসাবে সমস্ত অবস্থানগত পরামিতি নয়, সমস্ত অবস্থানগত পরামিতিগুলি IFSএকটি শব্দ হিসাবে প্রথম অক্ষর দ্বারা পৃথক separated যেহেতু ফলাফলটি উদ্ধৃত না করা হয় তবে ক্ষেত্র বিভাজনের বিষয়বস্তু, ফলে প্রভাবটি যেমন $@অব্যক্ত ক্ষেত্রে ব্যবহৃত হয় তেমন।
মুরু

1
নিশ্চিত হওয়ার জন্য: অব্যর্থ। @ এবং $ * একই কারণ তারা উভয়ই শব্দ বিভাজনের বিষয়। উদ্ধৃত, "$ @" অবস্থানগত পরামিতিগুলির শব্দ বিভাজন সংরক্ষণ করে, এমনকি যদি কোনও পৃথক প্যারামিটারে আইএফএসে একটি অক্ষর থাকে।
কোজিরো

1
যেহেতু শাঁসের জন্য ব্যবহৃত হয় তার কোনও উল্লেখ আছে? আমি ভাবছি পার্ল সেগুলি শেল স্ক্রিপ্টিং থেকে নেওয়া কিনা।
সিম্বাবাক

এটি পার্লকে কয়েক দশক (বা কমপক্ষে কয়েক বছর) পূর্বে পূর্বাভাস দেয়। পার্ল সিনট্যাক্সের অনেকগুলি শেল সিনট্যাক্স দ্বারা প্রভাবিত হয়েছিল। (পার্ল জন্মগ্রহণ করেছিলেন 1987 সালে, এবং এই বাক্য গঠনটির অনেকগুলি আসল বোর্ন শেল (1977) থেকে এসেছে $ _ যখন পরিচয় হয়েছিল তখন আমি 100% নই, তবে 1987 সালের আগে এটি প্রায় ভাল ছিল
পপআপ

6

$?একটি বিশেষ শেল প্যারামিটার (পরিবর্তনশীল)।

সাধারণভাবে সমস্ত ব্যবহারকারীর দ্বারা সংজ্ঞায়িত ভেরিয়েবলের নাম অবশ্যই অক্ষর শ্রেণি থেকে অক্ষর ব্যবহার করে করা উচিত (যা দিয়ে [:alnum:]শুরুও [a-zA-Z0-9_]হতে পারে না [0-9])।

সংক্ষেপে, $?একটি বিশেষ পরিবর্তনশীল ( এবং এর মধ্যে বেশ কয়েকটি রয়েছে ) যা শেল নিজেই অভ্যন্তরীণ বৈশিষ্ট্য হিসাবে বিবেচনা করা যেতে পারে যা পূর্ববর্তী কমান্ডের প্রস্থান কোড সরবরাহ করে (সফলকৃত বা ব্যর্থ হোক)।

ভেরিয়েবল সম্পর্কে আরও ধারণা পেতে আপনি এটি পড়তে পারেন ।


4

$?বাশে একটি বিশেষ পরিবর্তনশীল যা সর্বদা শেষ সম্পাদিত কমান্ডের রিটার্ন / প্রস্থান কোড ধারণ করে ।

আপনি এটি চালিয়ে টার্মিনালে দেখতে পারেন echo $?

রিটার্ন কোডগুলি সীমার মধ্যে রয়েছে [0; 255]।
একটি রিটার্ন কোডের 0অর্থ সাধারণত সবকিছু ঠিক আছে।
অন্যান্য মানগুলি ত্রুটিগুলি নির্দেশ করে। বেশিরভাগ অ্যাপ্লিকেশনগুলি ফিরে আসে 1বা কাস্টম মানগুলি। যদি কোনও আদেশ না পাওয়া যায়, তবে ভেরিয়েবলটিতে সাধারণত থাকে127

আপনি যদি এই ভেরিয়েবলটিকে একটি নির্দিষ্ট মান হিসাবে সেট করতে চান তবে আপনি সহজেই bash -c "exit 5"উদাহরণস্বরূপ রিটার্ন কোডটি দিয়ে ফিরে এটি করতে পারেন 5


অবিচ্ছিন্নভাবে কাঁটাচামচা ছাড়াই প্রস্থান স্থিতি সেট করার একটি শেল ফাংশন একটি পসিক্স অনুগত উপায়। setstatus() { return 5; }
কোজিরো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.