5

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

IFS=$'\n'

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

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

IFS=$OLDIFS

一般在哪些情况下我们应该设置IFS回原来的值?

4

1 回答 1

8

代替:

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 的评论。每当IFS对子shell 进行更改时,更改都会自动恢复。但是,当您在交互式 shell 中进行修改时,情况并非如此。上述建议是为确保我们不会意外修改IFS整个 shell 所需的处理。*

于 2013-06-19T03:56:11.037 回答