嵌套循环结合修改IFS环境变量遍历文件数据中IFS的修改一致性

Posted 枝桠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌套循环结合修改IFS环境变量遍历文件数据中IFS的修改一致性相关的知识,希望对你有一定的参考价值。

 

 

以下这个脚本使用了两个不同的IFS值来解析数据。第一个IFS值解析出/etc/passwd文件中的单独的行。内部for循环接着将IFS值改为冒号,云溪你从/etc/passwd的行中解析出单独的值。

 1 #!/bin/bash
 2 #changing the IFS value
 3 IFS.OLD=$IFS
 4 IFS=$\'\\n\'
 5 for entry in $(cat /etc/passwd)
 6 do
 7         echo "Value in $entry -"
 8         IFS=:
 9         for value in $entry
10         do
11                 echo "  $value"
12         done
13 #       IFS=$`\\n`
14 done

注意看第4、8行以及第13行,明明在内层for循环的时候IFS的值已经被改变了,可是,在下一次大循环里的IFS的值还是\'\\n\'。

这是否可以说明内层循环和外层循环的变量没有必然联系。可是,IFS不是全局变量吗?

以上脚本的运行效果如下:

再有一个问题,注意看上面的运行结果图的test1~test2,然后我们来查一下

并没有含有test的这个值

再看看当前目录下的文件

这些test正是当前目录下的文件

那么脚本运行结果里的test是哪里来的呢?注意看

shell把这个当成是通配符了,结果把当前目录下的文件给显示出来了

最后,特别提醒:第4行的符号是单引号而不是反引号!

以上是关于嵌套循环结合修改IFS环境变量遍历文件数据中IFS的修改一致性的主要内容,如果未能解决你的问题,请参考以下文章

Bash 的 IFS 变量如何影响命令替换?

for循环间隔修改(解决把以空格隔开需要把一整行作为整体)

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

Linux的IFS

环境变量IFS

x1fn.ifs命令的用途