tvk 2020-01-28
IFS变量是一个特殊的环境变量,叫做内部域分隔符。IFS环境变量定义了bash shell用作字段分隔符的一系列字符。如果bash shell在数据中看到了这些字符中的任意一个,它就会假定这表明了列表中一个新数据字段的开始。
比如在Shell中输入以下代码:
IFS=: _str_="hello:world" for i in $_str_; do echo $i; done
会得到以下结果:
hello world
原因是引用字符串变量$_str_没有加双引号时,Shell在for语句中根据IFS变量将字符串$_str_进行切割,切割成很多个字符串,然后逐个echo $i输出。
在Shell中输入以下代码:
IFS=: _str_="hello:world" for i in "$_str_"; do echo $i; done
会得到以下结果:
hello world
原因是引用字符串变量$_str_加了双引号时,表示将其当作一个整体来处理,IFS不会起作用,所以上述for循环只会循环一次。然后echo $i的时候由于$i未加双引号,故被IFS切割,但由于echo将其一起输出,故在同一行上。
所以可知,在Shell中输入以下代码:
IFS=: _str_="hello:world" for i in "$_str_"; do echo "$i"; done
会得到以下结果:
hello:world