IFS变量对加双引号和不加双引号变量的区别对待

tvk 2020-01-28

1. IFS(Internal Field Seprator) 变量

IFS变量是一个特殊的环境变量,叫做内部域分隔符。IFS环境变量定义了bash shell用作字段分隔符的一系列字符。如果bash shell在数据中看到了这些字符中的任意一个,它就会假定这表明了列表中一个新数据字段的开始。

2. IFS对待未加双引号的变量

比如在Shell中输入以下代码:

IFS=:
_str_="hello:world"
for i in $_str_; do echo $i; done

会得到以下结果:

hello
world

原因是引用字符串变量$_str_没有加双引号时,Shell在for语句中根据IFS变量将字符串$_str_进行切割,切割成很多个字符串,然后逐个echo $i输出。

2. IFS对待加双引号的变量

在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

相关推荐