我的输入文件内容是
欢迎
welcome1
使用welcome2
我的脚本是
for groupline in `cat file`
do
echo $groupline;
done
我得到了以下输出。
welcome welcome1 welcome2
为什么不打印空行。我想要理由。
答案 0 :(得分:4)
您需要将IFS
设置为换行符\n
IFS=$"\n"
for groupline in $(cat file)
do
echo "$groupline";
done
或者加双引号。有关解释,请参阅here
for groupline in "$(cat file)"
do
echo "$groupline";
done
没有干预IFS,“正确”的方式是在读取循环时使用
while read -r line
do
echo "$line"
done <"file"
答案 1 :(得分:1)
因为你做错了。您希望while
不是for
,而是希望read
,而不是cat
:
while read groupline
do
echo "$groupline"
done < file
答案 2 :(得分:0)
The solution ghostdog74 provided很有帮助,但有一个缺陷。
IFS无法使用双引号(至少在Mac OS X中),但可以使用单引号,如:
IFS=$'\n'
这很好,但不兼容破折号,也许这更好:
IFS='
'
空行将在以下程序中使用:
IFS='
'
for line in $(cat file)
do
echo "$line"
done
但是你不能在$(cat file)
周围添加双引号,它会将整个文件视为一个单独的字符串。
for line in "$(cat file)"
如果还要处理空白行,请使用以下
while read line
do
echo "$line"
done < file
答案 3 :(得分:0)
使用IFS=$"\n"
和var=$(cat text.txt)
删除输出echo $var