जब शेल एक लाइन को पार्स कर रहा होता है, तो यह लाइन को शब्दों में बदल देगा, शब्दों पर विभिन्न विस्तार (क्रम में) करेगा, फिर कमांड निष्पादित करेगा।
मान लीजिए test=1:2:3:4:5:6
आइए इस कमांड को देखें: IFS=":" read a b c d e f <<< "$test"
टोकनिंग के बाद, और पैरामीटर विस्तार होता है:IFS=":"
read
a
b
c
d
e
f
<<<
"1:2:3:4:5:6"
शेल रीड कमांड की अवधि के लिए IFS वेरिएबल सेट करेगा, और read
इसके इनपुट में $ IFS को लागू करने का तरीका जानता है , और वैरिएबल नामों को मान देता है।
इस आदेश में एक समान कहानी है, लेकिन अलग परिणाम: HOME="hello" echo "$HOME"
चूंकि कमांड शुरू होने से पहले पैरामीटर का विस्तार होता है, शेल में है:
HOME="hello" echo "/home/username"
और फिर, इको कमांड के निष्पादन के दौरान, $ HOME के नए मूल्य का उपयोग बिल्कुल नहीं किया जाता है।
आप जो करने की कोशिश कर रहे हैं उसे प्राप्त करने के लिए, इनमें से एक चुनें
# Delay expansion of the variable until its new value is set
HOME="hello" eval 'echo "$HOME"'
या
# Using a subshell, so the altered env variable does not affect the parent.
# The semicolon means that the variable assignment will occur before
# the variable expansion
(HOME="hello"; echo "$HOME")
लेकिन पहले वाले को मत उठाओ।
local
।