开发者

Cat with new line

My input file's contents are:

welcome

welcome1

welcome2

开发者_C百科

My script is:

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

I got the following output:

welcome
welcome1
welcome2 

Why doesn't it print the empty line?


you need to set IFS to newline \n

IFS=$"\n"
for groupline in $(cat file)
do
        echo "$groupline";
done

Or put double quotes. See here for explanation

for groupline in "$(cat file)"
do
        echo "$groupline";
done

without meddling with IFS, the "proper" way is to use while read loop

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


Because you're doing it all wrong. You want while not for, and you want read, not cat:

while read groupline
do
  echo "$groupline"
done < file


The solution ghostdog74 provided is helpful, but has a flaw.

IFS could not use double quotes (at least in Mac OS X), but can use single quotes like:

IFS=$'\n'

It's nice but not dash-compatible, maybe this is better:

IFS='
'

The blank line will be eaten in the following program:

IFS='
'
for line in $(cat file)
do
        echo "$line"
done

But you can not add double quotes around $(cat file), it will treat the whole file as one single string.

for line in "$(cat file)"

If want blank line also be processed, using the following

while read line
do
    echo "$line"
done < file


Using IFS=$"\n" and var=$(cat text.txt) removes all the "n" characters from the output echo $var

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜