IFS = $'\ n'删除了“n”

时间:2014-05-26 15:27:05

标签: shell for-loop sh ifs

我遇到问题" IFS = $' \ n'。

old_IFS=$IFS
file="Good morning
Good morning
Good morning
Good morning
Good morning"

IFS=$'\n'
for line in $file
    do
       echo $line
done
IFS=$old_IFS

当我执行脚本时:

Good mor
i
g
Good mor
i
g
Good mor
i
g
Good mor
i
g
Good mor
i
g

" n"被删除。 我想逐行查看文件

2 个答案:

答案 0 :(得分:2)

迭代多行数据(无论您的shell是否支持$'...')的正确方法是使用while循环重复调用read

while read -r; do
    echo "$REPLY"
done <<EOF
$file
EOF

答案 1 :(得分:1)

正如其他人所指出的,我不认为您使用的shell支持$'...'语法。

如果您的系统使用Dash作为sh,您应该能够通过将IFS分配给空行或未分配的变量来将n=""; IFS=$n分配给新行。例如,<<<word将允许您按新行分割。这是一个hack,只有在空变量被解释为解释器的新行时才有效。

你也可以使用file="Good morning Good morning Good morning Good morning Good morning" while read line; do echo $line done <<<"$file" 来读取像Bash这样的shell中的字符串。

while read -r line; do 
    echo "$line"
done < file

否则,您可以逐行读取文件。

{{1}}