<分区>
我有以下 .txt 文件:
Marco
Paolo
Antonio
我想逐行阅读它,并且我想为每一行分配一个 .txt 行值给一个变量。假设我的变量是$name
,流程是:
- 从文件中读取第一行
- 分配
$name
= "Marco" - 用
$name
做一些任务 - 从文件中读取第二行
- 分配
$name
= "Paolo"
标签 bash
<分区>
我有以下 .txt 文件:
Marco
Paolo
Antonio
我想逐行阅读它,并且我想为每一行分配一个 .txt 行值给一个变量。假设我的变量是$name
,流程是:
$name
= "Marco"$name
做一些任务$name
= "Paolo"最佳答案
以下逐行读取作为参数传递的文件:
while IFS= read -r line; do
echo "Text read from file: $line"
done < my_filename.txt
这是 standard form用于循环读取文件中的行。说明:
IFS=
(或 IFS=''
)防止修剪前导/尾随空格。-r
防止反斜杠转义被解释。或者你可以把它放在一个 bash 文件帮助脚本中,示例内容:
#!/bin/bash
while IFS= read -r line; do
echo "Text read from file: $line"
done < "$1"
如果将以上内容保存到文件名为 readfile
的脚本中,它可以按如下方式运行:
chmod +x readfile
./readfile filename.txt
如果文件不是 standard POSIX text file (= 不以换行符终止),可以修改循环以处理尾随的部分行:
while IFS= read -r line || [[ -n "$line" ]]; do
echo "Text read from file: $line"
done < "$1"
在这里,|| [[ -n $line ]]
防止最后一行不以 \n
结尾时被忽略(因为 read
在遇到 EOF 时返回非零退出代码)。
如果循环内的命令也从标准输入读取,read
使用的文件描述符可能会发生其他事情(避免 standard file descriptors ),例如:
while IFS= read -r -u3 line; do
echo "Text read from file: $line"
done 3< "$1"
(非 Bash shell 可能不知道 read -u3
;使用 read <&3
代替。)
关于bash - 逐行读取文件并将值赋给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25042716/