Ketika shell mem-parsing sebuah baris, itu akan mengubah tokenize menjadi kata-kata, melakukan berbagai ekspansi (dalam urutan) pada kata-kata, kemudian jalankan perintah.
Seharusnya test=1:2:3:4:5:6
Mari kita lihat perintah ini: IFS=":" read a b c d e f <<< "$test"
Setelah tokenizing, dan terjadi ekspansi parameter :IFS=":"
read
a
b
c
d
e
f
<<<
"1:2:3:4:5:6"
Shell akan mengatur variabel IFS untuk durasi perintah read, dan read
tahu bagaimana menerapkan $ IFS ke inputnya , dan memberikan nilai pada nama-nama variabel.
Perintah ini memiliki cerita yang serupa, tetapi hasilnya berbeda: HOME="hello" echo "$HOME"
Karena ekspansi parameter terjadi sebelum perintah dimulai, shell memiliki:
HOME="hello" echo "/home/username"
Dan kemudian, selama eksekusi dari perintah echo, nilai baru $ HOME tidak digunakan sama sekali.
Untuk mencapai apa yang Anda coba lakukan, pilih salah satunya
# Delay expansion of the variable until its new value is set
HOME="hello" eval 'echo "$HOME"'
atau
# 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")
tapi jangan memilih yang pertama.
local
.