【问题标题】:Empty array after a while loopwhile循环后的空数组
【发布时间】:2014-10-16 16:16:41
【问题描述】:

我正在尝试做一些非常简单的事情,即在数组中插入一组日期。因此,我运行了一个 git 命令,该命令将返回一行结果,从该结果中我使用 awk 获取日期。在我遍历所有日期并将它们添加到数组之后。最后,数组仍然是空的,但是如果我在循环期间打印数组,它似乎里面有数据。

为什么循环后数组为空?

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

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

【问题讨论】:

  • 由于是在子shell中赋值变量,所以变量作用域是子shell,父进程看不到。

标签: linux bash shell


【解决方案1】:

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

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

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

【讨论】:

  • 天哪,所以我的假设完全错误。有用。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
相关资源
最近更新 更多