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} # 正确显示 |