新线猫

时间:2010-03-17 06:59:28

标签: bash

我的输入文件内容是

  

欢迎

     

welcome1

     

使用welcome2

我的脚本是

for groupline in `cat file`
do
        echo $groupline;
done

我得到了以下输出。

welcome
welcome1
welcome2 

为什么不打印空行。我想要理由。

4 个答案:

答案 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

中的所有“n”个字符