Bash读取文件和构建字符串的问题

时间:2016-09-23 20:47:50

标签: bash git-bash

我试图读取文件的所有行并将它们连接成一个字符串。谷歌搜索广泛之后,这就是我所拥有的:

#!/bin/bash

filename='file.txt'
files=''

while read p; do
    files="$files $p"
done < $filename

echo $files

问题是看起来文件变量似乎每次都被覆盖。不应该只是附加它吗?

示例file.txt:

test1
test2
test3

输出是:

 test2

(请注意,我按原样发布了这个内容 - 输出中的单词test2之前有一个空格)

2 个答案:

答案 0 :(得分:3)

您的输入文件具有DOS行结尾,并且不以换行符结尾。这意味着文件的值实际上是test1\r test2\r。永远不会添加test3,因为上次调用read会将p设置为test3,但由于找不到最终的换行符而导致退出状态为1。

终端将回车视为将光标移动到行首的指令,因此\r之后的所有内容都会覆盖先前写在该行上的内容。

正确的做法是修复输入文件,使其符合文本文件的POSIX标准:所有行(包括最后一行)都由一个\n字符终止。

答案 1 :(得分:1)

问题是你的file.txt有回车。

要检查这一点,请更改最后一行:

  

echo $ files | cat -v