我们知道使用while循环一行一行的处理变量中的数据的写法是这样的
local result=""
echo "${result}" |while read line;do
...
done
比如下面这个
local tmp=""
echo "${result}" |while read line;do
tmp = "${result}|${line}"
done
其实我们期望的是把result中的每一行读取出来,然后使用竖线分隔的。但是上面的写法是有问题的,tmp最终根本不会得到想要的结果的。
这里这种写法while循环中无论怎么改变外面变量的值,只要一旦代码执行到循环外边,对tmp的更变都会消失,或者说在循环内部的变量是无法影响循环外边的变量的。如果想要改变循环外面数据的值,只需要加个括号,使while循环整体变成一个子shell
local tmp=""
echo "${result}" | (
while read line;do
tmp = "${result}|${line}"
done
)