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脚本编程大全