我完全迷失了尝试做一些我认为非常简单的事情:逐行读取文件并在一行上输出所有内容。
我在 RHEL 上使用 bash。
考虑一个简单的测试用例,其中包含包含以下内容的文件(test.in):
one
two
three
four
我想要一个读取此文件并输出的脚本:
one two three four
Done
我尝试过这个(test.sh):
cat test.in | while read in; do
printf "%s " "$in"
done
echo "Done"
结果如下:
# ./test.sh
foure
Done
#
似乎 printf 导致光标跳到紧随 %s 之后的同一行的第一个位置。 执行
echo -e "$in \c"
时出现问题。
有什么想法吗?
另一个答案:
tr '[:space:]' ' ' < file
echo
这也必须是最安全、最有效的。如果您只想转换新行而不是任何空格,请使用
\n
。
您可以使用:
echo -- $(<test.in); echo 'Done'
one two three four
Done
echo -- `cat file` | tail -c +4
--
是为了保护您免受命令行选项的影响。但在我的 shell 中,--
被打印出来。我认为这可能是一个错误。必须检查一下。
因此您需要检查是否必须在实现中包含
| tail -c +4
。
paste -s <file_name>
paste -s 将串行打印文件内容(单行)。