আইএফএস ভেরিয়েবল প্রতিবার শেল শব্দের বিভাজন বলা কোনও কাজ সম্পাদন করে । এটি ব্যবহৃত হয় সবচেয়ে সাধারণ ক্ষেত্রে প্যারামিটার বিস্তৃতি (উদাঃ $var
) বা কমান্ড প্রতিস্থাপন (যেমন $(some-command)
বা কমান্ড ব্যাকটিক্স) একটি কমান্ড পরে। এখানে যদি প্রসারণে কোনও IFS
অক্ষর থাকে তবে কমান্ডটি প্রক্রিয়া করার আগে এটি বিভিন্ন 'শব্দের' মধ্যে বিভক্ত হয়। কার্যকরভাবে এর অর্থ হ'ল এই অক্ষরগুলি পরিবর্তিত পাঠ্যকে বিভিন্ন যুক্তিতে বিভক্ত করে (ভেরিয়েবলটি প্রথমে নির্দিষ্ট করা থাকলে কমান্ডের নাম সহ)।
সুতরাং IFS
স্থান, ট্যাব এবং নিউলাইন হওয়ার ডিফল্ট মান হওয়ার কারণ হ'ল এগুলি শ্বেত স্পেস অক্ষর যা সাধারণত কোনও শব্দকে বিভক্ত করার আশা করে।
শব্দের বিভক্ত হওয়া থেকে রোধ করার একটি উপায় হ'ল সম্প্রসারণ ( "$var"
) এর চারপাশে ডাবল কোট ব্যবহার করা - বাস্তবে আপনি আপনার প্রশ্নে এটি করেছেন। আপনি যদি এটি না করেন তবে কোনও আউটপুট আসবে না echo
কারণ এতে কোনও আর্গুমেন্ট থাকবে না, কেবল অক্ষরগুলি বিভক্ত করার যুক্তি।
আরও লক্ষ করুন যে দুটি জায়গাগুলি যেখানে শব্দ বিভাজন প্যারামিটার বিস্তারের পরে ঘটে না সেটি ভেরিয়েবল অ্যাসাইনমেন্টের সাথে হয় (যেমন var=$othervar
এবং var=$(somecommand)
ঠিক আছে), এবং [[ ]]
কনস্ট্রাক্টের মধ্যে ( [[ $var = $othervar ]]
ঠিক আছে তবে [ $var = $othervar ]
উদ্ধৃত হওয়া উচিত)।
পরিশেষে, একজন জ্ঞানী ব্যক্তি একবার আমার দিকে ইঙ্গিত করেছিলেন, একটি সাধারণ ভুল ধারণাটি হ'ল শব্দ বিভাজন রোধই একটি পরিবর্তনশীল উদ্ধৃত করার একমাত্র কারণ। এটি নয়, উদ্ধৃতিটি পথের নাম সম্প্রসারণ বা গ্লোব সম্প্রসারণকেও বাধা দেয় কারণ এটি বেশি পরিচিত। যদি কোনও ভেরিয়েবলের মতো গ্লোব অক্ষর থাকে *
তবে ভেরিয়েবলটি যখন কোনও কমান্ডে অব্যক্ত ব্যবহার করা হয় তখন এগুলি ফাইলের আকারে প্রসারিত হতে পারে। উদাহরণস্বরূপ, বিবেচনা করুন:
var=*
echo $var
এটি বর্তমান ডিরেক্টরিতে ফাইলগুলির নাম প্রদর্শন করবে।
স্টিফেন নীচে যেমন উল্লেখ করেছেন , IFS
প্রসারিত হওয়ার সাথে সাথে অক্ষরের ক্রমটি উল্লেখযোগ্য "$*"
। থেকে bash
মানুষ পৃষ্ঠা:
"$*" is equivalent to "$1c$2c...", where c is the first character of the value of
the IFS variable. If IFS is unset, the parameters are separated by spaces. If
IFS is null, the parameters are joined without intervening separators.
শব্দ বিভাজনের আরও উদাহরণের জন্য, দয়া করে এই উত্তরটি দেখুন - https://unix.stackexchange.com/a/118444/48083
$IFS
ব্যবহৃত হয়"$*"
যার কারণে আদেশের বিষয়টি গুরুত্বপূর্ণ।