[কমান্ড একজন সাধারণ কমান্ড। যদিও বেশিরভাগ শেলগুলি এটিকে দক্ষতার জন্য অন্তর্নির্মিত হিসাবে সরবরাহ করে, এটি শেলের সাধারণ সিনট্যাকটিক নিয়ম মানায়। [একেবারে সমতুল্য test, ব্যতীত এটির শেষ যুক্তি হিসাবে [একটি প্রয়োজন ]এবং testএটি নাও করে।
ডাবল বন্ধনী [[ … ]]বিশেষ বাক্য গঠন। এগুলি কেএসএতে প্রবর্তিত হয়েছিল (বেশ কয়েক বছর পরে [) কারণ [সঠিকভাবে ব্যবহার করতে সমস্যা হতে পারে এবং [[শেল বিশেষ অক্ষর ব্যবহার করে এমন কিছু নতুন সুন্দর সংযোজন মঞ্জুরি দেয়। উদাহরণস্বরূপ, আপনি লিখতে পারেন
[[ $x = foo && $y = bar ]]
কারণ সমগ্র শর্তাধীন অভিব্যক্তি শেল দ্বারা পার্স করা হয়, যেহেতু [ $x = foo && $y = bar ]প্রথম দুই কমান্ড বিভক্ত করা হবে [ $x = fooএবং $y = bar ]দ্বারা পৃথক &&অপারেটর। একইভাবে ডাবল বন্ধনী প্যাটার্ন মেলানো সিনট্যাক্সের মতো জিনিসগুলিকে সক্ষম করে, উদাহরণস্বরূপ, [[ $x == a* ]]মানটির xশুরু হয় কিনা তা পরীক্ষা করা a; একক বন্ধনীতে এটি a*ফাইলের তালিকায় প্রসারিত হবে যার নাম aবর্তমান ডিরেক্টরিতে শুরু হয় । ডাবল বন্ধনী প্রথমে ksh এ প্রবর্তিত হয়েছিল এবং কেবল ksh, bash এবং zsh এ উপলব্ধ।
একক বন্ধনীর ভিতরে, আপনাকে অন্যান্য স্থানগুলির মতো চলক বিকল্পের চারপাশে ডাবল উদ্ধৃতি ব্যবহার করতে হবে, কারণ এগুলি কেবল একটি কমান্ডের পক্ষে যুক্তিযুক্ত (যা [কমান্ড বলে মনে হয়)। ডাবল বন্ধনীগুলির ভিতরে আপনার ডাবল কোট লাগবে না, কারণ শেল শব্দের বিভাজন বা গ্লোববিং করে না: এটি শর্তসাপেক্ষ এক্সপ্রেশনকে পার্স করছে, কমান্ড নয়।
[[ $var1 = "$var2" ]]আপনি যদি বাইট-টু-বাইট স্ট্রিং তুলনা করতে চান তবে আপনার ব্যতিক্রমগুলি এখানে ব্যতিক্রম , অন্যথায়, এর বিপরীতে $var2মেলে একটি প্যাটার্ন be$var1
একটি জিনিস যা আপনি করতে পারবেন না তা [[ … ]]হ'ল অপারেটর হিসাবে ভেরিয়েবল ব্যবহার। উদাহরণস্বরূপ, এটি পুরোপুরি আইনী (তবে খুব কমই কার্যকর):
if [ -n "$reverse_sort" ]; then op=-gt; else op=-lt; fi
…
if [ "$x" "$op" "$y" ]; then …
আপনার উদাহরণে
dir="/home/mazimi/VirtualBox VMs"
if [ -d ${dir} ]; then …
ভিতরে কমান্ড ifহল [4 আর্গুমেন্ট সহ -d, /home/mazimi/VirtualBox, VMsএবং ]। শেলটি পার্স করে -d /home/mazimi/VirtualBoxএবং তারপরে কী করতে হবে তা জানে না VMs। ${dir}একটি সুসংগঠিত কমান্ড পেতে আপনার শব্দ বিভাজন রোধ করা উচিত ।
সাধারণভাবে বলতে গেলে, ভেরিয়েবল এবং কমান্ড বিকল্পের চারপাশে সর্বদা ডাবল উদ্ধৃতি ব্যবহার করুন আপনি যদি না জানেন যে আপনি শব্দটি বিভক্ত করতে চান এবং ফলাফলটিতে গ্লোববিং করতে চান। মূল স্থানগুলি যেখানে ডাবল উদ্ধৃতি ব্যবহার না করা নিরাপদ তা হ'ল:
- একটি অ্যাসাইনমেন্টে:
foo=$bar(তবে নোট করুন যে আপনার export "foo=$bar"যেমন বা অ্যারে অ্যাসাইনমেন্টে ডাবল উক্তি প্রয়োজন array=("$a" "$b"));
- একটি
caseবিবৃতিতে case $foo in …:;
- এর ডান দিকে ব্যতীত ডবল বন্ধনী ভিতরে
=বা ==: অপারেটর (যতক্ষণ না আপনি প্যাটার্ন ম্যাচিং চাও) [[ $x = "$y" ]]।
এই সমস্ত ক্ষেত্রে ডাবল উক্তি ব্যবহার করা সঠিক, সুতরাং আপনি উন্নত নিয়মগুলি এড়িয়ে যেতে এবং সর্বদা উদ্ধৃতি ব্যবহার করতে পারেন।