বিশেষ ডলারের সাইন শেল ভেরিয়েবলগুলি কী কী?


781

বাশ-এ, বেশ কয়েকটি ভেরিয়েবল উপস্থিত হবে যা বিশেষ, ধারাবাহিক-অর্থ মান রাখে। এই ক্ষেত্রে,

./myprogram &; echo $!

ব্যাকগ্রাউন্ড হওয়া প্রক্রিয়ার পিআইডি ফিরিয়ে দেবে myprogram। আমি অন্যদের সম্পর্কে জানি, যেমন $?আমি মনে করি বর্তমান টিটিওয়াই। অন্য কেউ আছে?


15
তাদের বেশিরভাগই কেবল বাশ-ই নয়। এগুলি বোর্ন-সম্পর্কিত অন্যান্য শেলগুলিতেও ব্যবহৃত হয় এবং বাস্তবে পসিক্স দ্বারা নির্দিষ্ট করা হয় ।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

1
কী: IFS = $ '\ N' দেখতে: stackoverflow.com/questions/4128235/...
sgu

1
@sgu এটি কোনও পরামিতি নয়; এটি একটি বিশেষ ধরণের উদ্ধৃতি। $'\n'একটি আক্ষরিক নিউলাইন চরিত্র যা \nএএসসিআইআই 10
ডিজিট্রফটি

আপনি এখানে এসেছে খুঁজছেন ${1}, ${*}ইত্যাদি ধনুর্বন্ধনী শুধু দ্ব্যর্থতা নিরসন জন্য, এবং প্রায়ই অপ্রয়োজনীয়। বিচ্ছিন্নতার ${x}সাথে একেবারে সমান $x
ট্রিপলি

কী $!মানে? আমি সচেতন !$কিন্তু তা নয়।
শ্রীধর সারনোবাত

উত্তর:


1357
  • $1, $2, $3, ... হয় অবস্থানগত পরামিতি
  • "$@"একটি অ্যারের মত সব অবস্থানগত প্যারামিটার কনস্ট্রাক্ট হয় {$1, $2, $3 ...}
  • "$*"সমস্ত অবস্থানগত পরামিতিগুলির আইএফএস সম্প্রসারণ $1 $2 $3 ...,।
  • $# অবস্থানগত পরামিতিগুলির সংখ্যা।
  • $- শেল জন্য বর্তমান বিকল্প সেট।
  • $$ বর্তমান শেলের পিড (সাবসেল নয়)।
  • $_ সাম্প্রতিকতম প্যারামিটার (বা শুরুর সাথে সাথে বর্তমান শেলটি শুরু করার জন্য কমান্ডের অ্যাবস পাথ)।
  • $IFS (ইনপুট) ক্ষেত্র বিভাজক।
  • $? সবচেয়ে সাম্প্রতিক অগ্রভাগ পাইপলাইন প্রস্থান স্থিতি।
  • $! সাম্প্রতিকতম ব্যাকগ্রাউন্ড কমান্ডের পিআইডি।
  • $0 শেল বা শেল স্ক্রিপ্টের নাম।

উপরের বেশিরভাগটি ব্যাশ রেফারেন্স ম্যানুয়ালটিতে বিশেষ পরামিতিগুলির অধীনে পাওয়া যাবে । শেল দ্বারা সেট সমস্ত পরিবেশ পরিবর্তনশীল আছে

একটি বিস্তৃত সূচকের জন্য, দয়া করে রেফারেন্স ম্যানুয়াল পরিবর্তনশীল সূচকটি দেখুন


2
এগুলি সমস্তই bashম্যান পৃষ্ঠায় নথিভুক্ত । একমাত্র বিজোড়তা কেবল $_এটির MAILPATHপরিবর্তনশীলটিতে এর ব্যবহারের প্রসঙ্গে উল্লেখ করা হয় ।
চিপনার

4
বাকী সংজ্ঞাটির জন্য @ চ্যানেল বিশেষ প্যারামিটারগুলিরman(1) bash অধীনে দেখুন । $_
কোজিরো

8
আমি ব্যাশ স্ক্রিপ্টগুলির !$পরিবর্তে ব্যবহার করি $_কারণ পরে কখনও কখনও ব্যর্থ হয়।
এএমসি

ভাল তালিকা কোজিরো। আমি এই সিনট্যাক্স পেরিয়ে $ {1 + "$ @"} এর অর্থ কী?
ব্যবহারকারী 178047

3
@ এএমসি: এবং এর মধ্যে পার্থক্যের জন্য unix.stackexchange.com/questions/271659/… দেখুন । !$$_
tricasse

44
  • $_ শেষ কমান্ডের শেষ যুক্তি
  • $# বর্তমান স্ক্রিপ্টে যুক্ত আর্গুমেন্টের সংখ্যা
  • $*/ $@স্ট্রিং / সীমাবদ্ধ তালিকা হিসাবে স্ক্রিপ্টে দেওয়া আর্গুমেন্টের তালিকা

আমার মাথার উপরে. গুগল বিশেষ বিশেষ ভেরিয়েবলের জন্য।


124
"আমি করেছি। তারা আমাকে এখানে পাঠিয়েছে।" - বুকশপ স্কিট (অফিসিয়াল ডক: gnu.org/software/bash/manual/bashref.html# স্পেশাল- প্যারামিটার )
গ্রেগগো

1
আমি মনে করি $@এটি স্ট্রিং এবং $*সীমিত তালিকা (যাইহোক, উপরের স্বীকৃত উত্তর অনুসারে)।
রাস্তাজেদি

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

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

15

কী $#, $0এবং $1, ..., কী তা বুঝতে সহায়তা করার জন্য $nআমি এই স্ক্রিপ্টটি ব্যবহার করি:

#!/bin/bash

for ((i=0; i<=$#; i++)); do
  echo "parameter $i --> ${!i}"
done

এটি চালানো একটি প্রতিনিধি আউটপুট ফেরত দেয়:

$ ./myparams.sh "hello" "how are you" "i am fine"
parameter 0 --> myparams.sh
parameter 1 --> hello
parameter 2 --> how are you
parameter 3 --> i am fine

4
লুপটির জন্য আমি কী বোঝাতে চাইছি? এ কারণেই আমি এখানে আছি এবং আমি কোথাও কোনও উত্তর খুঁজে পাই না কারণ এটি কী বলবে জানি না।
অ্যান্টনি

7
@ অ্যান্টনি এটাকে ভেরিয়েবল ইন্ডিয়ারেশন বলা হয় । আপনি ব্যাশে তার ব্যবহারের একটি ভাল ব্যাখ্যা পেতে পারেন : পরোক্ষ প্রসার, দয়া করে ব্যাখ্যা করুন?
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

3

কয়েকটি উদাহরণ দিয়ে যত্ন নিন; $ 0 এর মধ্যে কিছু নামী পথের পাশাপাশি প্রোগ্রামটির নাম অন্তর্ভুক্ত থাকতে পারে। উদাহরণস্বরূপ এই দুই লাইনের স্ক্রিপ্টটিকে ./mytery.sh হিসাবে সংরক্ষণ করুন এবং এটি সম্পাদন করুন।

#!/bin/bash

echo "parameter 0 --> $0" ; exit 0

আউটপুট:

parameter 0 --> ./mytry.sh

এটি স্ল্যাকওয়্যার 14.2 এর মাধ্যমে বাশের একটি বর্তমান (বছরের 2016) সংস্করণে রয়েছে


5
$ 0 এ কোনও পথ অন্তর্ভুক্ত রয়েছে কিনা তা নির্ভর করে আপনি কীভাবে প্রথম স্থানে স্ক্রিপ্টটি চালিয়েছেন তার উপর নির্ভর করে। যদি আপনি "./mytry.sh" চালিত হন তবে এটি আপনি $ 0 এ দেখতে পাবেন। আপনি যদি "~ / mytry.sh" প্রবেশ করান তবে আপনি পুরো পথটি দেখতে পাবেন (কারণ শেলটি প্রসারিত হবে।)। যদি আপনি "। Mytry.sh" করেন তবে আপনি 'বাশ' দেখতে পাবেন।
স্টিভ ফলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.