@
শেল স্ক্রিপ্টে একটি স্বাক্ষর ( ) এর পরে ডলারের চিহ্নটির অর্থ কী?
উদাহরণ স্বরূপ:
umbrella_corp_options $@
@
শেল স্ক্রিপ্টে একটি স্বাক্ষর ( ) এর পরে ডলারের চিহ্নটির অর্থ কী?
উদাহরণ স্বরূপ:
umbrella_corp_options $@
উত্তর:
$@
হয় সব পরামিতি স্ক্রিপ্টে গৃহীত।
উদাহরণস্বরূপ, আপনি যদি কল করেন ./someScript.sh foo bar
তবে $@
সমান হবে foo bar
।
যদি তুমি করো:
./someScript.sh foo bar
এবং তারপরে ভিতরে someScript.sh
উল্লেখ:
umbrella_corp_options "$@"
এটি umbrella_corp_options
প্রতিটি পৃথক প্যারামিটারের সাথে ডাবল উদ্ধৃতিতে আবদ্ধ হবে, কলারের কাছ থেকে ফাঁকা স্থানের সাথে প্যারামিটার নেবে এবং সেগুলি পাস করবে।
someScript.sh foo bar "boo far"
?
$@
নেই অগত্যা স্ক্রিপ্ট ... যেমন প্রেরণ paramaters থেকে আসা; set a b "x y"; printf '(%s)' "$@"
ফলাফল(a)(b)(x y)
$@
এবং$*
$@
$*
উভয়ের অর্থ "সমস্ত কমান্ড লাইন আর্গুমেন্ট" প্রায় একই রকম is এগুলি প্রায়শই সমস্ত আর্গুমেন্টকে অন্য কোনও প্রোগ্রামে পাস করার জন্য ব্যবহৃত হয় (এইভাবে অন্য প্রোগ্রামটির চারপাশে একটি মোড়ক তৈরি করে)।
দুটি সিনট্যাক্সের মধ্যে পার্থক্যটি প্রদর্শিত হয় যখন আপনার ফাঁকা জায়গাগুলির সাথে কোনও যুক্তি রয়েছে (উদাহরণস্বরূপ) এবং $@
ডাবল উদ্ধৃতিতে রেখেছেন :
wrappedProgram "$@"
# ^^^ this is correct and will hand over all arguments in the way
# we received them, i. e. as several arguments, each of them
# containing all the spaces and other uglinesses they have.
wrappedProgram "$*"
# ^^^ this will hand over exactly one argument, containing all
# original arguments, separated by single spaces.
wrappedProgram $*
# ^^^ this will join all arguments by single spaces as well and
# will then split the string as the shell does on the command
# line, thus it will split an argument containing spaces into
# several arguments.
উদাহরণ: কল করা
wrapper "one two three" four five "six seven"
ফলাফল হবে:
"$@": wrappedProgram "one two three" four five "six seven"
"$*": wrappedProgram "one two three four five six seven"
^^^^ These spaces are part of the first
argument and are not changed.
$*: wrappedProgram one two three four five six seven
wrappedProgram "$*"
-> separated by single spaces.
তবে আপনার দ্বিতীয় উদাহরণে সেগুলি একক স্পেস দ্বারা পৃথক করা হয়নি।
এটি হ'ল কমান্ড লাইন আর্গুমেন্ট যেখানে:
$@
= স্ট্রিংয়ের তালিকায়
$*
সমস্ত যুক্তি সংরক্ষণ করে = সমস্ত আর্গুমেন্টকে একক স্ট্রিং হিসাবে সংরক্ষণ করে
$#
= আর্গুমেন্টের সংখ্যা সঞ্চয় করে
খাঁটি $@
অর্থের ব্যবহার বেশিরভাগ ক্ষেত্রে "প্রোগ্রামারকে যতটা সম্ভব কষ্ট দেয়", কারণ বেশিরভাগ ক্ষেত্রে এটি শব্দের পৃথকীকরণ এবং ফাঁকা স্থান এবং যুক্তিগুলিতে অন্যান্য অক্ষরগুলির সাথে সমস্যা সৃষ্টি করে।
(অনুমান করা) সকল ক্ষেত্রে 99% এর মধ্যে এটি আবদ্ধ করা দরকার "
: "$@"
আর্গুমেন্টগুলির উপর নির্ভরযোগ্যতার সাথে পুনরাবৃত্তি করার জন্য এটি ব্যবহার করা যেতে পারে।
for a in "$@"; do something_with "$a"; done
for a in start_token "$@" end_token; do something_with "$a"; done
:-)
@
এক থেকে শুরু করে অবস্থানগত পরামিতিগুলিতে প্রসারিত হয়। ডাবল উদ্ধৃতিতে যখন প্রসারণ ঘটে তখন প্রতিটি প্যারামিটার পৃথক শব্দের দিকে প্রসারিত হয়। অর্থাৎ, "$ @" "$ 1" "$ 2" এর সমতুল্য .... যদি কোনও শব্দের মধ্যে দ্বিগুণ-উদ্ধৃত বিস্তৃতি ঘটে তবে প্রথম পরামিতিটির প্রসারটি মূল শব্দের প্রথম অংশের সাথে যুক্ত হবে এবং শেষ প্যারামিটারের বিস্তৃতি মূল শব্দের শেষ অংশের সাথে যুক্ত হয়। যখন কোনও অবস্থানীয় পরামিতি নেই, "$ @" এবং $ @ কিছুই প্রসারিত করবেন না (যেমন, সেগুলি সরানো হয়েছে)।
সংক্ষেপে, $@
কলার থেকে ফাংশন বা স্ক্রিপ্টে স্থানিক স্থিতিগত আর্গুমেন্টগুলিতে প্রসারিত হয় । এর অর্থ প্রাসঙ্গিক-নির্ভর : একটি ফাংশনের অভ্যন্তরে, এটি এই জাতীয় ফাংশনে প্রেরিত আর্গুমেন্টগুলিতে প্রসারিত হয়। যদি কোনও স্ক্রিপ্টে ব্যবহৃত হয় (কোনও স্কোপের ভিতরে নয়) তবে এটি এ জাতীয় স্ক্রিপ্টে আর্গুমেন্টে প্রসারিত হয়।
$ cat my-sh
#! /bin/sh
echo "$@"
$ ./my-sh "Hi!"
Hi!
$ put () ( echo "$@" )
$ put "Hi!"
Hi!
$@
শেলটিতে কীভাবে আচরণ করা হয় তা বোঝার সময় এখন আর একটি বিষয় যা সর্বাধিক গুরুত্বের সাথে তা শব্দ বিভাজন । শেলটি IFS
ভেরিয়েবলের সামগ্রীর উপর ভিত্তি করে টোকেনগুলি বিভক্ত করে । এর ডিফল্ট মান \t\n
; যেমন, সাদা স্থান, ট্যাব এবং নিউলাইন।
প্রসারিত করা "$@"
আপনাকে পাস করা আর্গুমেন্টগুলির একটি প্রাথমিক কপি দেয় । তবে প্রসারণ $@
সবসময় হয় না not আরও সুনির্দিষ্টভাবে, যদি যুক্তিগুলির মধ্যে অক্ষর থাকে তবে IFS
সেগুলি বিভক্ত হবে।
আপনি বেশিরভাগ সময় যা ব্যবহার করতে চাইবেন তা "$@"
নয় $@
।