我试图做一些非常简单的事情,包括在数组中插入一组日期。所以我运行一个git命令,返回一行结果,从结果我得到了使用awk的日期。在迭代所有日期并将它们添加到数组之后。最后,数组仍然是空的,但如果我在循环期间打印数组,它似乎内部有数据。
为什么循环后数组为空?
git reflog --date=local <branch_name> |
awk '{ print $3 " " $4 " " $5 }' |
while read date; do a+=(`echo "$date"`); done; echo ${a[@]}
我理解管道后面的每个命令都在不同的子shell中执行,但在这种情况下我认为它不会影响最终结果......
答案 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[@]}"