IFS环境变量

IFS环境变量

Content #

在处理代码量较大的脚本时,可能在一个地方需要修改IFS的值,然后再将其恢复原状,而脚本的其他地方则继续沿用IFS的默认值。一种安全的做法是在修改 IFS之前保存原来的IFS值,之后再恢复它。

IFS.OLD=$IFS
IFS=$'\n'
<在代码中使用新的IFS值>
IFS=$IFS.OLD

如果要遍历文件中以冒号分隔的值(比如/etc/passwd文件),则只需将IFS的值设为冒号即可:

IFS=:

如果要指定多个IFS字符,则只需在赋值语句中将这些字符写在一起即可:

IFS=$'\n:;"'

该语句会将换行符、冒号、分号和双引号作为字段分隔符。如何使用IFS字符解析数据没有任何限制。

典型的例子是处理/etc/passwd文件。这要求你逐行遍历该文件,将IFS变量的值改成冒号,以便分隔开每行中的各个字段。

#!/bin/bash
# changing the IFS value
IFS.OLD=$IFS
IFS=$'\n'
for entry in $(cat /etc/passwd)
do
   echo "Values in $entry -"
   IFS=:
   for value in $entry
   do
      echo "   $value"
   done
done

这个脚本使用了两个不同的IFS值来解析数据。第一个IFS值解析出/etc/passwd 文件中的各行。内层for循环接着将IFS的值修改为冒号,以便解析出 /etc/passwd文件各行中的字段。

From #

Linux命令行与shell脚本编程大全

ANSI-C Quoting