from: http://truenight0.com/read_from_pipes.html
问题
最近有一个需求,需要把一个命令的结果分别写入几个变量中,于是想到了用read:
echo a b c | read x y z |
可是问题来了,打印出x,y,z均显示为空
echo $x $y $z #结果为空 |
原来在管道的右边会打开一个子进程,所以读到的变量都是子进程中的,父进程中无法显示。
解决方法
1. 使用here string
read x y z <<< $(echo a b c) |
2. 先把第一个命令的结果重定向到文件,再从文件中读取
echo a b c > file read x y z < file |
解另一个例子
cat file | while read line do var=${line} done echo ${var} # 结果为空 while read line do var=${line} done < file echo ${var} # 正确显示 |
本文解释了如何使用read命令将管道输出分别分配给多个变量,并提供了两种解决方案来解决变量显示为空的问题。此外,通过示例演示了解决方法的实际应用。
888

被折叠的 条评论
为什么被折叠?



