我有这个脚本
tests=()
igrepy -l $1 . | while read -r line
do
// some processing
tests+=("${second[0]}")
done
echo ${tests[@]}
我已经检查过“第二个”有结果并且确实如此,但是我的回显返回了一个空白字符串。这里出了什么问题?这是在 rhel6 上,“igrepy”是不区分大小写的 grep 的别名,仅搜索 python 文件
答案1
您看到的问题是标准的“管道创建子外壳” bash
。
例如,如果你这样做
a=10
echo 100 | read a
echo $a
thena
仍将被设置10
为 bash。
在你的情况下你有
igreppy | while read ...
do
....
done
该循环内的所有内容都while
将位于子 shell 中。
相反,它可以使用进程替换来重写
while read ...
do
....
done < <(igreppy ...)
现在没有为循环创建子shell while
。