bash - 从 shell 脚本中的变量中逐行读取

标签 bash shell

我有一个多行的脚本变量。 我如何遍历此变量以逐行读取它并按我想要的方式处理每一行?

最佳答案

考虑以下多行变量

x=$(echo -e "a\nb\nc d e")

每一行都有一个简单的过程:只是echo它带有前缀= LINE:并在该行周围加上单引号。以下任一代码都将满足该要求:

while read line; do echo "LINE: '${line}'"; done <<< "$x"

while read line; do echo "LINE: '${line}'"; done < <(echo "$x")

既不创建子 shell(这样你就可以,例如,在循环中设置变量并在循环外访问它们),并且都输出

LINE: 'a'
LINE: 'b'
LINE: 'c d e'

但是假设你有

x=$(echo -e "a \n b\nc d e")
# note--------^--^

并且前导和尾随空格对您的应用程序很重要(例如,解析 Git 瓷器)。上面的两个代码都会为后者的变量/数据提供与前者完全相同的输出,这不是你想要的。要保留前导和尾随空格,请替换 while read linewhile IFS= read -r line .即,以下任一代码

while IFS= read -r line; do echo "LINE: '${line}'"; done <<< "$x"

while IFS= read -r line; do echo "LINE: '${line}'"; done < <(echo "$x")

会产生

LINE: 'a '
LINE: ' b'
LINE: 'c d e'

参见 Greg Wooledge's excellent Bash FAQ了解详情。

关于bash - 从 shell 脚本中的变量中逐行读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11902177/

相关文章:

Fortran 代码的 Bash 包装器

linux - 查找名称中出现 1 次到无限次字符的文件

linux - 从 txt 文件 unix 中选择错误的列值

shell - 如果sftp中不存在,如何创建目录

linux - 如何在查找中排除特定文件

shell - 如何通过 shell 脚本确定网页是否存在?

python - 使用 Python 从 linux 命令行读取

python - awk:使用多个分隔符时保留原始字段分隔符

python - 命令完成之前子进程不会返回

linux - 使用 sed 从给定文件中删除单词