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变量对加双引号和不加双引号变量的区别对待的主要内容,如果未能解决你的问题,请参考以下文章

json的对象属性必须加双引号吗

json的对象属性必须加双引号吗

Oracle字段别名加as与不加的区别

为啥jQuery可以这样使用的$(id)不加双引号,

shell中,如何替换双引号中内容为某个变量?

JSON异步加载时间线