লিনাক্সে $ * এবং $ # কী?


82

লিনাক্সে নিম্নলিখিত পরিবেশের ভেরিয়েবলগুলির অর্থ কী?

  1. $ * (ডুটার চিহ্নটি একটি নক্ষত্রপুঞ্জ অনুসরণ করে) কী?
  2. $ # (হ্যাশ চিহ্ন / নম্বর সাইন / অক্টোটোরপে / পাউন্ড সাইন এর পরে ডলার সাইন) কী?

উত্তর:


114

থেকে এখানে :

$#    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
এই বিশেষ প্যারামিটারগুলি বোর্ন-উত্পন্ন সমস্ত শেলগুলিতে সত্য (যেমন sh, বাশ, ড্যাশ, অ্যাশ, Ksh, zsh)।
ডেনিস উইলিয়ামসন

সংশোধন: $*এবং $#1) শেল ভেরিয়েবল, পরিবেশের ভেরিয়েবল নয়; 2)
মানীকৃত

3
এছাড়াও লক্ষ্য করুন যে "$@"বেশিরভাগ সময় ${1+"$@"}(বহনযোগ্যতার কারণে) হিসাবে লেখা হয়েছে , ব্যাখ্যার জন্য stackoverflow.com/questions/743454/… দেখুন ।
hlovdal

যেহেতু 'কমান্ডের নাম (প্যারামিটার 0) গণনা করা হবে না ...', উদাহরণস্বরূপ উপরের উদাহরণটি starting # = 2 হওয়া উচিত, 0 থেকে গণনা শুরু করা
জোসেফ ক্লিমুক

0

$# যুক্তি সংখ্যা প্রতিনিধিত্ব করে:

[root@baymax ~]# set -- a
[root@baymax ~]# echo $#
1

[root@baymax ~]# set -- a b c
[root@baymax ~]# echo $#
3

2
সুপার ব্যবহারকারীকে স্বাগতম সাইটটি একটি জ্ঞানের ভিত্তি, সুতরাং উদ্দেশ্যটি হ'ল প্রতিটি উত্তর ইতিমধ্যে অবদান করা হয়নি এমন প্রশ্নের সমাধান দেয়। এটি কেবল প্রশ্নের অর্ধেক ঠিকানা দেয় এবং পূর্বের উত্তরে তথ্য ইতিমধ্যে ভালভাবে কভার করা হয়েছে।
ফিক্সার 1234
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.