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

Vas*_*lis 4 unix linux bash scripting ifs

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

IFS=$'\n'

for i in `cat "$1"`; do
    echo "$i" >> xtempfile.tmp;
done
Run Code Online (Sandbox Code Playgroud)

它工作正常,没有任何问题.但是当我在终端中运行它时,我必须将IFS变量设置回其原始值

IFS=$OLDIFS
Run Code Online (Sandbox Code Playgroud)

一般情况下,我们应该在哪些情况下IFS恢复到原来的价值?

jay*_*ngh 6

代替:

IFS=$'\n'

for i in `cat "$1"`; do
    echo "$i" >> xtempfile.tmp;
done
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

while IFS=$'\n' read -r line; do
echo "$line"
done < "$1" >> xtempfile.tmp
Run Code Online (Sandbox Code Playgroud)

这将设置IFS变量的持续时间while loop.

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

  • bash使用`IFS`作为分裂机制.因此,一个好的做法是仅在需求期间将其设置为您的需求,然后将其设置回来.`IFS`的默认值是`space,tabs和newline`.这个[答案](http://unix.stackexchange.com/q/18886/11209)将会有更多的亮点. (2认同)