添加到数组

添加到数组

我有这个脚本

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

相关内容