我试图读取文件的所有行并将它们连接成一个字符串。谷歌搜索广泛之后,这就是我所拥有的:
#!/bin/bash
filename='file.txt'
files=''
while read p; do
files="$files $p"
done < $filename
echo $files
问题是看起来文件变量似乎每次都被覆盖。不应该只是附加它吗?
示例file.txt:
test1
test2
test3
输出是:
test2
(请注意,我按原样发布了这个内容 - 输出中的单词test2
之前有一个空格)
答案 0 :(得分:3)
您的输入文件具有DOS行结尾,并且不以换行符结尾。这意味着文件的值实际上是test1\r test2\r
。永远不会添加test3
,因为上次调用read
会将p
设置为test3
,但由于找不到最终的换行符而导致退出状态为1。
终端将回车视为将光标移动到行首的指令,因此\r
之后的所有内容都会覆盖先前写在该行上的内容。
正确的做法是修复输入文件,使其符合文本文件的POSIX标准:所有行(包括最后一行)都由一个\n
字符终止。
答案 1 :(得分:1)
问题是你的file.txt有回车。
要检查这一点,请更改最后一行:
echo $ files | cat -v