一段时间后循环的空数组

时间:2014-10-16 16:16:42

标签: linux bash shell

我试图做一些非常简单的事情,包括在数组中插入一组日期。所以我运行一个git命令,返回一行结果,从结果我得到了使用awk的日期。在迭代所有日期并将它们添加到数组之后。最后,数组仍然是空的,但如果我在循环期间打印数组,它似乎内部有数据。

为什么循环后数组为空?

git reflog --date=local <branch_name> | 
awk '{ print $3 " " $4 " " $5 }' | 
while read date; do a+=(`echo "$date"`); done; echo ${a[@]}

我理解管道后面的每个命令都在不同的子shell中执行,但在这种情况下我认为它不会影响最终结果......

1 个答案:

答案 0 :(得分:4)

你的while循环在子shell中运行,因此变量在完成后超出了范围。

由于您使用的是bash,因此您可以使用进程替换:

while read date; do 
    a+=( $(echo "$date") )
done < <(git reflog --date=local <branch_name> | awk '{ print $3 " " $4 " " $5 }')
echo "${a[@]}"