我有一个多行的脚本变量。 如何遍历这个变量来逐行读取它,并按照我想要的方式处理每一行?从shell脚本中的变量中逐行读取
10
A
回答
21
考虑以下的多行可变
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'
1
虽然我通常使用“while read”来处理多行变量,但我最近有一个实例,它从文件的每一行中删除了前导空格。使用此代替固定我的问题:
printf %s "$var" | while IFS= read -r line
do
echo "$line"
done
相关问题
- 1. 从shell脚本逐行读取文件
- 2. shell脚本不逐行读取
- 3. 从shell脚本读取变量的shell脚本
- 4. 从shell中的多行变量读取
- 5. shell脚本:如何从变量中只读取部分文本
- 6. 从使用shell脚本的文件逐行读取
- 7. shell逐行读取
- 8. 在Unix Shell脚本中逐行读取文件(空格) - 问题
- 9. shell脚本在unix中逐行读取文件并更新文件中的行
- 10. 如何在shell脚本中逐行读取文件并将每行存储在变量中
- 11. Shell脚本从文件读取变量并在perl脚本中使用
- 12. 从shell脚本中的变量运行shell命令
- 13. 从文本文件读取变量到shell脚本
- 14. shell脚本:从文件中读取
- 15. 从文件 - shell脚本中读取值
- 16. 如何使用shell脚本读取变量中的多个值
- 17. 如何从bash脚本中的文件逐行读取?
- 18. Shell - Awk - 从变量中读取
- 19. 逐行读取并写入另一个文件shell脚本
- 20. 从C shell脚本中的变量中提取子字符串?
- 21. 在shell脚本中,如何逐行读取csv文件并获取值
- 22. 如何在shell脚本中逐行读取多行输出命令?
- 23. 如何在Shell脚本中读取Env变量?
- 24. 将文件读取到变量shell脚本中
- 25. 从文本区逐行读取并分配变量
- 26. 从文本文件到变量逐行读取
- 27. 如何从linux shell中逐行运行R脚本?
- 28. 从shell脚本读取python脚本中的空格参数
- 29. Flash动作脚本:如何从文本文件中逐行提取变量?
- 30. 用bash脚本逐行读取文件
这是一个完美的解决方案,只是好奇,为什么不只是x =“a \ nb \ nc d e”? – 2012-08-10 13:13:56
@SenthilKumar,该字符串包含10个字符:'a','\','n','b'等。“\ n”在双引号内不是特殊的。在bash中,可以写'$“a \ nb \ nc d e”'来在字符串中嵌入真正的换行符。 “-e”标志告诉'echo'处理“\ n”作为新行,而不是两个单独的字符。 – chepner 2012-08-10 13:23:32
@chepner:thx,'$'对我来说是新的,但它可以用单引号'$'a \ nb \ nc d e'' – 2012-08-10 14:02:41