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\r
。 test3
从未被添加,因为对 read
的最后一次调用将 p
设置为 test3
,由于找不到最后的换行符,退出状态为 1。
终端将回车 return 视为将光标移动到行首的指令,因此 \r
之后的所有内容都会覆盖该行之前写入的内容。
正确的做法是修复输入文件,使其符合文本文件的 POSIX 标准:所有行,包括最后一行,都以单个 \n
结尾字符。
问题是您的 file.txt 有马车 returns。
要检查这一点,请更改最后一行:
echo $files | cat -v
我正在尝试读取文件的所有行并将它们连接成一个字符串。经过广泛的谷歌搜索后,这就是我所拥有的:
#!/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\r
。 test3
从未被添加,因为对 read
的最后一次调用将 p
设置为 test3
,由于找不到最后的换行符,退出状态为 1。
终端将回车 return 视为将光标移动到行首的指令,因此 \r
之后的所有内容都会覆盖该行之前写入的内容。
正确的做法是修复输入文件,使其符合文本文件的 POSIX 标准:所有行,包括最后一行,都以单个 \n
结尾字符。
问题是您的 file.txt 有马车 returns。
要检查这一点,请更改最后一行:
echo $files | cat -v