考虑到:
- https://linuxcommand.org/lc3_man_pages/readh.html
- https://man7.org/linux/man-pages/man2/read.2.html
- https://git.savannah.gnu.org/cgit/coreutils.git/tree/src
- https://stackoverflow.com/a/60869467/15603477
cat filename | while read i
do
echo $i
done
所有其他答案都失败了,这个有效!这会将文本文件逐行剪切。
我想了解更多关于阅读的关键部分。但我找不到源代码。
which read
无输出。在这种情况下什么是“读”?
事实上并非如此。将
read
解析该行并根据 shell 规则重建它。例如,捕获的内容
$x
既没有前导空格,也没有尾随空格:(更改
read x
为IFS= read -r x
并比较结果。)此外,如果在$x
使用变量时不使用双引号,则会对其进行进一步处理。例如,在您的情况下,文件
a
,b
,c
还将由当前目录中的文件集进行补充。(我应该指出,touch
只会创建空文件作为副作用;如果文件已经存在,它只会将上次修改时间更新为现在,并且绝对不会截断或重新创建它们。)毕竟,您将无法使用
$x
循环外部的值,因为循环位于子 shell 中。x='demo'
(在循环开始之前设置,然后echo "$x"
在循环结束之后设置。它将不受循环影响。)在这种情况下,您不需要,cat
因为只有一个文件:但即使如此,通常也不需要像这样循环输入,因为许多工具无论如何都会逐行处理文件。比照
这是
read
shell 内置命令,由 POSIX 指定。Bash 实现在 Bash 手册中进行了描述,其源代码是Bash 存储库的一部分。