我遇到问题" 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"被删除。 我想逐行查看文件
答案 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}}