我们什么时候应该在脚本中将IFS变量更改回原始值?

时间:2013-06-19 03:43:34

标签: linux bash unix scripting ifs

我们假设我通过cronjob执行此脚本:

IFS=$'\n'

for i in `cat "$1"`; do
    echo "$i" >> xtempfile.tmp;
done

它可以正常工作而不会引起任何问题。但是当我在终端中运行它时,我必须将IFS变量设置回其原始值

IFS=$OLDIFS

一般情况下,我们应该在哪些情况下将IFS设置回其原始值?

1 个答案:

答案 0 :(得分:6)

而不是:

IFS=$'\n'

for i in `cat "$1"`; do
    echo "$i" >> xtempfile.tmp;
done

您可以执行以下操作:

while IFS=$'\n' read -r line; do
echo "$line"
done < "$1" >> xtempfile.tmp

这会在IFS的持续时间内设置while loop变量。

*根据samveen的评论添加。无论何时在子shell中对IFS进行更改,都会自动还原更改。但是,在交互式shell中进行修改时,情况并非如此。上述建议是为确保我们不会意外修改整个shell的IFS而进行的必要处理。 *