IFS变量对加双引号和不加双引号变量的区别对待
1. IFS(Internal Field Seprator) 变量
IFS
变量是一个特殊的环境变量,叫做内部域分隔符。IFS
环境变量定义了 bash shell 用作字段分隔符的一系列字符。如果 bash shell 在数据中看到了这些字符中的任意一个,它就会假定这表明了列表中一个新数据字段的开始。默认情况下 IFS
指定为空白符(即空格、tab 符、换行符)。
2. IFS对待未加双引号的变量
比如在 bash shell 中输入以下代码:
1 | IFS=: |
会得到以下结果:
1 | hello |
原因是引用字符串变量 $_str_
没有加双引号时,Shell 在 for
语句中根据 IFS
变量将字符串 $_str_
进行切割,切割成很多个字符串,然后逐个 echo $i
输出。
3. IFS对待加双引号的变量
在 Shell 中输入以下代码:
1 | IFS=: |
会得到以下结果:
1 | hello world |
原因是引用字符串变量 $_str_
加了双引号时,表示将其当作一个整体来处理,IFS
不会起作用,所以上述 for
循环只会循环一次。然后 echo $i
的时候由于 $i
未加双引号,故被 IFS
切割,但由于 echo
将其一起输出,故在同一行上。
所以可知,在 bash shell 中输入以下代码:
1 | IFS=: |
会得到以下结果:
1 | hello:world |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 お前はどこまで見えている!
评论
WalineTwikoo