আপনি যা লিখেছেন তা প্রায় কাজ করে (সমস্ত ভেরিয়েবল সংখ্যা হলে এটি কাজ করবে), তবে এটি মোটেও মূর্খতাপূর্ণ উপায় নয়।
(…)
বন্ধনী একটি সাব-শেল নির্দেশ করে । এগুলির ভিতরে থাকা অন্যান্য ভাষার মতো একটি অভিব্যক্তি নয়। এটি কমান্ডের তালিকা (ঠিক বাইরের বন্ধনীগুলির মতো)। এই কমান্ডগুলি পৃথক সাবপ্রসেসে কার্যকর করা হয়, সুতরাং প্রথম বন্ধনীর ভিতরে সম্পাদিত কোনও পুনর্নির্দেশ, অ্যাসাইনমেন্ট ইত্যাদির প্যারেন্টেসিসের বাইরে কোনও প্রভাব নেই।
- একটি নেতৃস্থানীয় ডলার চিহ্ন দিয়ে,
$(…)
একটি হল কমান্ড প্রতিকল্পন আছে: প্রথম বন্ধনী ভিতরে কমান্ড, এবং কমান্ডের ফলাফল কমান্ড লাইন অংশ হিসাবে ব্যবহার করা হয় (অতিরিক্ত প্রসারণও পর যদি না প্রতিকল্পন উদ্ধৃতি চিহ্ন মধ্যে, কিন্তু যে অন্য গল্প ) ।
{ … }
ধনুর্বন্ধনী হ'ল বন্ধনীগুলির মতো যা তারা কমান্ডকে গোষ্ঠী করে তবে তারা কেবল পার্সিংকেই প্রভাবিত করে, দলবদ্ধ করে না। প্রোগ্রামটি x=2; { x=4; }; echo $x
4 টি মুদ্রণ করেx=2; (x=4); echo $x
2 টি প্রিন্ট করে ((বন্ধনীর আগে বন্ধনীগুলির চারপাশে ফাঁকা জায়গা এবং অর্ধিকোলনের প্রয়োজন হয়, যদিও বন্ধনীগুলি হয় না That's এটি কেবল একটি বাক্য গঠন মাত্র))
- শীর্ষস্থানীয় ডলারের চিহ্ন সহ, সম্ভাব্য অতিরিক্ত ট্রান্সফর্মেশন সহ একটি ভেরিয়েবলের মান পর্যন্ত প্রসারিত করে
${VAR}
একটি প্যারামিটার সম্প্রসারণ করা হয়।
((…))
ডাবল বন্ধনীগুলি একটি গাণিতিক নির্দেশকে ঘিরে , অর্থাত্, অন্যান্য প্রোগ্রামিং ভাষার অনুরূপ একটি বাক্য গঠন সহ পূর্ণসংখ্যার উপর একটি গণনা। এই বাক্য গঠনটি বেশিরভাগ ক্ষেত্রে অ্যাসাইনমেন্ট এবং শর্তসাপেক্ষে ব্যবহৃত হয়।
- পাটিগণিতের এক্সপ্রেশনগুলিতে একই বাক্য গঠন ব্যবহার করা হয়
$((…))
যা অভিব্যক্তির পূর্ণসংখ্যার মান পর্যন্ত প্রসারিত হয়।
[[ … ]]
ডাবল বন্ধনী শর্তসাপেক্ষ প্রকাশের চারপাশে । শর্তসাপেক্ষ এক্সপ্রেশনগুলি বেশিরভাগ অপারেটরগুলিতে নির্মিত হয় যেমন -n $variable
ভেরিয়েবলটি খালি -e $file
রয়েছে কিনা তা পরীক্ষা করা এবং কোনও ফাইল বিদ্যমান কিনা তা পরীক্ষা করা। স্ট্রিং ইক্যুয়ালিটি অপারেটরগুলিও রয়েছে: "$string1" == "$string2"
(সাবধান যে ডান দিকের দিকটি একটি প্যাটার্ন, উদাহরণস্বরূপ [[ $foo == a* ]]
টেস্টগুলি $foo
শুরু হওয়ার সাথে সাথে শুরু a
হলে [[ $foo == "a*" ]]
পরীক্ষা করা $foo
হয় a*
), এবং পরিচিত !
, &&
এবং ||
অবহেলা, সংমিশ্রণ এবং বিভাজনের জন্য অপারেটরগুলির পাশাপাশি গ্রুপিংয়ের জন্য প্রথম বন্ধনী রয়েছে। নোট করুন যে আপনার প্রতিটি অপারেটরের চারপাশে একটি স্থান প্রয়োজন (যেমন [[ "$x" == "$y" ]]
, না [[ "$x"=="$y" ]]
) এবং ;
বন্ধনীগুলির ভিতরে এবং বাইরে উভয় জায়গার মতো একটি স্থান বা একটি অক্ষর (যেমন [[ -n $foo ]]
, নয়)[[-n $foo]]
)।
[ … ]
একক বন্ধনী শর্তসাপেক্ষ এক্সপ্রেশনগুলির বিকল্প ফর্ম যা আরও বেশি quirks (তবে পুরানো এবং আরও বহনযোগ্য)। আপাতত কিছু লিখবেন না; আপনি যখন এতে স্ক্রিপ্টগুলি অন্তর্ভুক্ত করেন তখন তাদের নিয়ে উদ্বেগ শুরু করুন।
এটি আপনার পরীক্ষাকে বাশিতে লেখার মূio় উপায়:
if [[ $varA == 1 && ($varB == "t1" || $varC == "t2") ]]; then
আপনার যদি অন্যান্য শেলগুলির বহনযোগ্যতা প্রয়োজন হয় তবে এই উপায়টি হবে (প্রতিটি স্বতন্ত্র পরীক্ষার চারপাশে অতিরিক্ত উদ্ধৃতি এবং বন্ধনীগুলির পৃথক সেট =
এবং ksh / bash / zsh ==
বৈকল্পিকের পরিবর্তে theতিহ্যবাহী অপারেটরের ব্যবহারগুলি নোট করুন ):
if [ "$varA" = 1 ] && { [ "$varB" = "t1" ] || [ "$varC" = "t2" ]; }; then