IFS变量对加双引号和不加双引号变量的区别对待
Posted blueheart0621
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IFS变量对加双引号和不加双引号变量的区别对待相关的知识,希望对你有一定的参考价值。
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
以上是关于IFS变量对加双引号和不加双引号变量的区别对待的主要内容,如果未能解决你的问题,请参考以下文章