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

Issue with Bash reading file and building string

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

#!/bin/bash

filename='file.txt'
files=''

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

echo $files

问题是 files 变量似乎每次都被覆盖。不应该只是追加吗?

示例file.txt:

test1
test2
test3

输出为:

 test2

(请注意,我故意按原样发布 - 在输出中 test2 一词之前有一个 space)

您的输入文件有 DOS 行结尾,并且没有以换行符结尾。这意味着文件的价值真的是test1\r test2\rtest3 从未被添加,因为对 read 的最后一次调用将 p 设置为 test3,由于找不到最后的换行符,退出状态为 1。

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

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

问题是您的 file.txt 有马车 returns。

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

echo $files | cat -v