[转载]: 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 line与 while 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/

 

posted @ 2023-03-05 00:55  亦幻  阅读(444)  评论(1编辑  收藏  举报