bash - 逐行读取文件并将值赋给变量

标签 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/

相关文章:

bash - 如何在脚本本身内重定向整个 shell 脚本的输出?

linux - bash 调整文本网格大小

arrays - Bash - 通过每个镜像处理元统计数据

linux - 使用 Bash 备份目录

python没有正确执行shell命令 "mail"

bash - 无法在没有反斜杠的情况下对系统变量进行制表符补全

linux - 如何启用 bash-completion xrdp lxde

bash - 如何在 bash 脚本中使用两个不同的用户

linux - 你能用 bash/sh 脚本 quine 写一个简单的每周提醒吗?

bash - 将段错误消息从 C++ 程序重定向到文件