ধনুর্বন্ধনী ( $var
বনাম ${var}
)
বেশিরভাগ ক্ষেত্রে $var
এবং ${var}
একই রকম:
var=foo
echo $var
# foo
echo ${var}
# foo
ধনুর্বন্ধনী শুধুমাত্র অভিব্যক্তি মধ্যে অস্পষ্টতা সমাধান করার জন্য প্রয়োজন:
var=foo
echo $varbar
# Prints nothing because there is no variable 'varbar'
echo ${var}bar
# foobar
উদ্ধৃতি ( $var
বনাম "$var"
বনাম)"${var}"
)
আপনি যখন কোনও ভেরিয়েবলের চারপাশে ডাবল উক্তি যুক্ত করেন, আপনি শেলটিকে একটি একক শব্দের হিসাবে বিবেচনা করতে বলুন, তাতে সাদা অংশ থাকলেও:
var="foo bar"
for i in "$var"; do # Expands to 'for i in "foo bar"; do...'
echo $i # so only runs the loop once
done
# foo bar
নিম্নলিখিত ব্যবহারের সাথে সেই আচরণের তুলনা করুন:
var="foo bar"
for i in $var; do # Expands to 'for i in foo bar; do...'
echo $i # so runs the loop twice, once for each argument
done
# foo
# bar
$var
বনাম হিসাবে ${var}
, ধনুর্বন্ধনী শুধুমাত্র ছত্রভঙ্গ করার জন্য প্রয়োজন, উদাহরণস্বরূপ:
var="foo bar"
for i in "$varbar"; do # Expands to 'for i in ""; do...' since there is no
echo $i # variable named 'varbar', so loop runs once and
done # prints nothing (actually "")
var="foo bar"
for i in "${var}bar"; do # Expands to 'for i in "foo barbar"; do...'
echo $i # so runs the loop once
done
# foo barbar
নোট করুন যে "${var}bar"
উপরের দ্বিতীয় উদাহরণেও লিখিত হতে পারে "${var}"bar
, এক্ষেত্রে আপনার আর ধনুর্বন্ধনী প্রয়োজন নেই, অর্থাত্ "$var"bar
। তবে, আপনার স্ট্রিংয়ে প্রচুর উক্তি থাকলে এই বিকল্প ফর্মগুলি পড়া শক্ত হয়ে যেতে পারে (এবং তাই বজায় রাখা শক্ত)। এই পৃষ্ঠাটি বাশ-এ উদ্ধৃতি দেওয়ার জন্য একটি ভাল ভূমিকা সরবরাহ করে।
অ্যারে ( $var
বনাম $var[@]
বনাম ${var[@]}
)
এখন আপনার অ্যারের জন্য। বাশ ম্যানুয়াল অনুসারে :
সাবস্ক্রিপ্ট ছাড়াই একটি অ্যারে ভেরিয়েবল উল্লেখ করা 0 এর সাবস্ক্রিপ্ট সহ অ্যারে উল্লেখ করার সমতুল্য।
অন্য কথায়, আপনি যদি একটি সূচক সরবরাহ না করে থাকেন তবে আপনি []
অ্যারের প্রথম উপাদানটি পাবেন:
foo=(a b c)
echo $foo
# a
যা ঠিক তেমনই
foo=(a b c)
echo ${foo}
# a
একটি অ্যারের সমস্ত উপাদান পেতে, আপনাকে @
সূচক হিসাবে যেমন ব্যবহার করতে হবে , যেমন ${foo[@]}
। অ্যারেগুলির সাথে ধনুর্বন্ধনী আবশ্যক কারণ এগুলি ছাড়া শেলটি $foo
প্রথমে অংশটি প্রসারিত করবে এবং অ্যারের প্রথম উপাদানটি একটি আক্ষরিক দ্বারা অনুসরণ করবে [@]
:
foo=(a b c)
echo ${foo[@]}
# a b c
echo $foo[@]
# a[@]
এই পৃষ্ঠাটি বাশের অ্যারেগুলির জন্য একটি ভাল ভূমিকা।
উদ্ধৃতি পুনর্বিবেচনা ( ${foo[@]}
বনাম "${foo[@]}"
)
আপনি এই সম্পর্কে জিজ্ঞাসা করেননি তবে এটি একটি সূক্ষ্ম পার্থক্য যা সম্পর্কে জেনে রাখা ভাল। যদি আপনার অ্যারের উপাদানগুলিতে সাদা স্থান থাকতে পারে তবে আপনাকে ডাবল কোট ব্যবহার করতে হবে যাতে প্রতিটি উপাদানকে পৃথক "শব্দ:" হিসাবে বিবেচনা করা হয়
foo=("the first" "the second")
for i in "${foo[@]}"; do # Expands to 'for i in "the first" "the second"; do...'
echo $i # so the loop runs twice
done
# the first
# the second
ডাবল উদ্ধৃতি ব্যতীত আচরণের সাথে এর বিপরীতে:
foo=("the first" "the second")
for i in ${foo[@]}; do # Expands to 'for i in the first the second; do...'
echo $i # so the loop runs four times!
done
# the
# first
# the
# second
bash