我有这个剧本
tests=()
igrepy -l $1 . | while read -r line
do
// some processing
tests+=("${second[0]}")
done
echo ${tests[@]}
我检查了“ second”是否有结果,但确实如此,但是我的回声返回了一个空白字符串。这里出了什么问题?这在rhel6上,“ igrepy”是不区分大小写的grep的别名,仅搜索python文件
您看到的问题是使用的标准“管道创建子外壳” bash
。
例如,如果你这样做
a=10
echo 100 | read a
echo $a
然后a
仍将设置为10
bash。
就你而言
igreppy | while read ...
do
....
done
并且该while
循环中的所有内容都将位于子外壳中。
相反,可以使用流程替换将其重写
while read ...
do
....
done < <(igreppy ...)
现在,没有为while
循环创建任何子shell 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句