আপনার সবসময় সমস্ত তালিকা প্রসঙ্গে ভেরিয়েবলের চারপাশে উদ্ধৃতিগুলি দরকার , এটি যে কোনও স্থানে ভেরিয়েবলটি একাধিক মানগুলিতে প্রসারিত হতে পারে যদি না আপনি চান যে কোনও ভেরিয়েবলটি ছাড়ার 3 পার্শ্ব প্রতিক্রিয়া না চান।
তালিকা প্রেক্ষিতে মত সহজ কমান্ড আর্গুমেন্ট অন্তর্ভুক্ত [
বা echo
, for i in <here>
, অ্যারে বরাদ্দকরণ ... অন্যান্য প্রসঙ্গে যেখানে ভেরিয়েবল এছাড়াও উদ্ধৃত করা প্রয়োজন আছে। আপনি যদি না চান খুব ভাল কারণ না পান তবে সর্বদা ভেরিয়েবলগুলি উদ্ধৃত করা সেরা।
বিভাজন + গ্লোব অপারেটর হিসাবে উদ্ধৃতিগুলির (তালিকা প্রসঙ্গে) অনুপস্থিতির কথা ভাবেন ।
যেন echo $test
ছিল echo glob(split("$test"))
।
শেল আচরণ অধিকাংশ লোক বিভ্রান্তিকর হয় কারণ অধিকাংশ অন্যান্য ভাষায়, আপনার চারপাশের স্ট্রিং সংশোধন মত কোট করা puts("foo")
, এবং ভেরিয়েবল (যেমন প্রায় puts(var)
) যখন শেল এটা অন্যান্য উপায় বৃত্তাকার আছে: সবকিছু শেল মধ্যে স্ট্রিং, তাই সবকিছু প্রায় কোট নির্বাণ কষ্টকর হবে, আপনার echo test
, আপনার দরকার নেই "echo" "test"
। শেল-এ, উদ্ধৃতিগুলি অন্য কোনও কিছুর জন্য ব্যবহৃত হয়: কিছু চরিত্রের বিশেষ অর্থ প্রতিরোধ করে এবং / অথবা কিছু বিস্তারের আচরণকে প্রভাবিত করে।
ইন [ -n $test ]
বা echo $test
, শেল বিভক্ত হবে $test
(সমস্ত প্রসারিত (ডিফল্ট অনুসারে ঐ খালি উপর), এবং তারপর ফাইলের নাম প্রজন্ম সঞ্চালন *
ম্যাচিং ফাইলগুলির তালিকার, '?' ... নিদর্শন), এবং তারপর আর্গুমেন্ট যে তালিকা পাস [
বা echo
কমান্ড ।
আবার, এটি হিসাবে ভাবেন "[" "-n" glob(split("$test")) "]"
। যদি $test
খালি থাকে বা কেবল ফাঁকা (এসপিসি, ট্যাব, এনএল) থাকে তবে স্প্লিট + গ্লোব অপারেটর একটি খালি তালিকা ফিরিয়ে দেবে, সুতরাং এটি [ -n $test ]
হবে "[" "-n" "]"
, যা "-n" খালি পরীক্ষা করতে হবে এটি খালি স্ট্রিং কিনা। তবে ভাবুন যে $test
"*" বা "= ফু" থাকলে কী হত ...
ইন [ -n "$test" ]
, [
চার আর্গুমেন্ট পাস করা হয়েছে "["
, "-n"
, ""
এবং "]"
(উদ্ধৃতিগুলি ছাড়াই), যা আমরা কি চাই।
এটি echo
বা [
কোনও পার্থক্য না ঘটায়, এটি echo
খালি আর্গুমেন্ট বা কোনও যুক্তি কোনও ক্ষেত্রেই পাস করেছে কিনা তা কেবল একই জিনিসকে আউটপুট করে।
কমান্ড এবং কনস্ট্রাক্ট সম্পর্কিত আরও তথ্যের জন্য অনুরূপ প্রশ্নের এই উত্তরটিও দেখুন ।[
[[...]]
echo
, অতিরিক্ত স্থান এবং নিউলাইনগুলি কেড়ে নেওয়া হবে।