IFS चर का उपयोग हर बार शेल एक कार्य करता है जिसे शब्द विभाजन कहा जाता है । सबसे आम मामलों में जहां इसका उपयोग किया जाता है , एक कमांड में पैरामीटर विस्तार (जैसे $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
भी प्रयोग किया जाता है,"$*"
जिसके कारण क्रम मायने रखता है।