我有以下 .txt 文件:
Marco Paolo Antonio
我想逐行阅读它,并且对于每一行我想将一个 .txt 行值分配给一个变量。假设我的变量是$name,流程是:
$name
下面逐行读取作为参数传递的文件:
while IFS= read -r line; do echo "Text read from file: $line" done < my_filename.txt
这是在循环中从文件中读取行的标准形式。解释:
IFS=
IFS=''
-r
或者你可以把它放在一个 bash 文件帮助脚本中,示例内容:
#!/bin/bash while IFS= read -r line; do echo "Text read from file: $line" done < "$1"
如果将以上内容保存到具有 filename 的脚本中readfile,则可以按如下方式运行:
readfile
chmod +x readfile ./readfile filename.txt
如果文件不是标准的 POSIX 文本文件(= 不被换行符终止),则可以修改循环以处理尾随部分行:
while IFS= read -r line || [[ -n "$line" ]]; do echo "Text read from file: $line" done < "$1"
在这里,|| [[ -n $line ]]如果最后一行不以 a 结尾,则防止它被忽略\n(因为read在遇到 EOF 时返回非零退出代码)。
|| [[ -n $line ]]
\n
read
如果循环内的命令也从标准输入读取,则使用的文件描述符read可能会变成其他东西(避免使用标准文件描述符),例如:
while IFS= read -r -u3 line; do echo "Text read from file: $line" done 3< "$1"
(非 Bash shell 可能不知道read -u3;请read <&3改用。)
read -u3
read <&3