উত্তর:
থেকে এখানে :
$# Stores the number of command-line arguments that
were passed to the shell program.
$? Stores the exit value of the last command that was
executed.
$0 Stores the first word of the entered command (the
name of the shell program).
$* Stores all the arguments that were entered on the
command line ($1 $2 ...).
"$@" Stores all the arguments that were entered
on the command line, individually quoted ("$1" "$2" ...).
সুতরাং মূলত, $#
আপনার স্ক্রিপ্টটি কার্যকর করার সময় একটি যুক্তি দেওয়া হয়। $*
সমস্ত আর্গুমেন্ট যুক্ত একটি স্ট্রিং। উদাহরণস্বরূপ, $1
প্রথম যুক্তি এবং তাই। আপনি যদি আপনার স্ক্রিপ্টে একটি নির্দিষ্ট যুক্তি অ্যাক্সেস করতে চান তবে এটি দরকারী।
ব্রায়ান মন্তব্য হিসাবে, এখানে একটি সহজ উদাহরণ। আপনি যদি নিম্নলিখিত কমান্ডটি চালান:
./command -yes -no /home/username
$#
= 3$*
= -yes -no /home/username
$@
= অ্যারে: {"-yes", "-no", "/home/username"}
$0
= ./command
, $1
= -yes
ইত্যাদিএগুলি পসিক্স স্ট্যান্ডার্ডের অংশ , এবং সমস্ত অনুগত শেলগুলি সমর্থন করে। রেফারেন্সের জন্য, প্রতিটি বিশেষ প্যারামিটারের জন্য নীচে POSIX মানক সংজ্ঞা দেওয়া আছে। নোট না তিনটি অতিরিক্ত ভেরিয়েবল আছে: $-
, $$
এবং $!
।
$@
:
এক থেকে শুরু করে অবস্থানগত পরামিতিগুলিতে প্রসারিত হয়। যখন ডাবল-কোটের মধ্যে সম্প্রসারণ ঘটে এবং যেখানে ক্ষেত্র বিভাজন ( ফিল্ড বিভাজন দেখুন ) সঞ্চালিত হয়, প্রতিটি অবস্থানের পরামিতি পৃথক ক্ষেত্র হিসাবে প্রসারিত হবে, এই বিধানের সাথে প্রথম পরামিতিটির প্রসারণটি এখনও শুরুর অংশের সাথে যুক্ত হবে মূল শব্দটি (ধরে নেওয়া যে প্রসারিত প্যারামিটারটি একটি শব্দের মধ্যে এমবেড করা হয়েছিল) এবং শেষ প্যারামিটারের প্রসারটি এখনও মূল শব্দের শেষ অংশের সাথে যুক্ত হবে। যদি কোনও অবস্থানগত পরামিতি না থাকে তবে '@' এর বিস্তৃতি শূন্য ক্ষেত্র উত্পন্ন করবে, এমনকি '@' ডাবল-কোট করা থাকলেও।
$*
:
এক থেকে শুরু করে অবস্থানগত পরামিতিগুলিতে প্রসারিত হয়। যখন ডাবল-কোটেড স্ট্রিংয়ের মধ্যে প্রসার ঘটে ( ডাবল-কোটস দেখুন ), এটি আইএফএস ভেরিয়েবলের প্রথম অক্ষর দ্বারা বিভক্ত প্রতিটি পরামিতির মান সহ একটি একক ক্ষেত্রে প্রসারিত হবে বা আইএফএস সেট না থাকলে একটি দ্বারা প্রসারিত হবে। যদি আইএফএস কোনও নাল স্ট্রিংতে সেট করা থাকে তবে এটি সেট না করে সেট করার সমতুল্য নয়; এটির প্রথম অক্ষরটি বিদ্যমান নেই, সুতরাং প্যারামিটারের মানগুলি সংক্ষিপ্ত করে।
$#
:
দশমিক সংখ্যা অবস্থানগত পরামিতিগুলিতে প্রসারিত হয়। কমান্ডের নাম (প্যারামিটার 0) '#' দ্বারা প্রদত্ত সংখ্যায় গণনা করা হবে না কারণ এটি একটি বিশেষ পরামিতি, অবস্থানগত প্যারামিটার নয়।
$?
:
সর্বাধিক সাম্প্রতিক পাইপলাইন দশমিক প্রস্থান স্থিতি প্রসারিত ( পাইপলাইন দেখুন )।
$-
:
(হাইফেন।) অনুরোধের ভিত্তিতে, নির্দিষ্ট বিশেষ অন্তর্নির্মিত কমান্ড দ্বারা বা শেল দ্বারা স্পষ্টতই বর্তমান বিকল্পগুলির পতাকাগুলিতে (একক অক্ষরের বিকল্প নামগুলি একটি স্ট্রিংয়ে সংহত করে) প্রসারিত হয় ।
$$
:
আমন্ত্রিত শেলের দশমিক প্রক্রিয়া আইডিতে প্রসারিত হয়। সাব- শেলের ( শেল এক্সিকিউশন এনভায়রনমেন্ট দেখুন ), '$' বর্তমান শেলের সমান মান হিসাবে প্রসারিত হবে।
$!
:
বর্তমান শেল থেকে সম্পাদিত সর্বাধিক সাম্প্রতিক ব্যাকগ্রাউন্ড কমান্ডের ( দশিক তালিকা দেখুন ) দশমিক প্রক্রিয়া আইডিতে প্রসারিত হয় । (উদাহরণস্বরূপ, সাবহেলগুলি থেকে সম্পাদিত ব্যাকগ্রাউন্ড কমান্ডগুলি বর্তমান শেল পরিবেশে "$!" এর মানকে প্রভাবিত করে না)) পাইপলাইনের জন্য, প্রসেস আইডি পাইপলাইনে থাকা সর্বশেষ কমান্ডের।
$0
:
(শূন্য।) শেল বা শেল স্ক্রিপ্টের নামে প্রসারিত হয়। এই নামটি কীভাবে উত্পন্ন হয়েছে তার বিশদ বিবরণের জন্য sh দেখুন ।
$*
এবং $#
1) শেল ভেরিয়েবল, পরিবেশের ভেরিয়েবল নয়; 2)
"$@"
বেশিরভাগ সময় ${1+"$@"}
(বহনযোগ্যতার কারণে) হিসাবে লেখা হয়েছে , ব্যাখ্যার জন্য stackoverflow.com/questions/743454/… দেখুন ।
$#
যুক্তি সংখ্যা প্রতিনিধিত্ব করে:
[root@baymax ~]# set -- a
[root@baymax ~]# echo $#
1
[root@baymax ~]# set -- a b c
[root@baymax ~]# echo $#
3