为什么`IFS = read`经常使用,而不是`IFS =;一边读......

Modified on: Sat, 30 Jun 2018 10:24:00 +0800

通常的做法是将IFS的设置放在while循环之外,以便不再为每次迭代重复设置...这只是习惯性的“猴子看,猴子做”的风格,因为它一直是这只猴子直到我读 man read ,或者我在这里错过了一些微妙的(或明显的)陷阱?

作者:,Peter.O

最佳答案

陷阱就是那个

IFS=; while read..

为循环外的整个shell环境设置IFS,而

IFS =读取时

IFS=; while read..

仅针对read调用重新定义(Bourne shell除外)。
您可以检查是否像

那样进行循环

while IFS= read

然后在这样的循环之后,echo "blabalbla $IFS ooooooo"打印

blabalbla ooooooo

之后

IFS=; read xxx; ... done

IFS 保持重新定义:现在echo "blabalbla $IFS ooooooo"打印

while IFS= read xxx; ... done

因此,如果您使用第二种形式,则必须记住重置:IFS=$' \t\n'


这个问题的第二部分已合并到此处,所以我从这里删除了相关的答案。
子>


相关问答

添加新评论