You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中使用&后台运行时数组追加失效问题及FIFO解决方案

Bash 后台运行时数组追加无输出问题

在Bash脚本中使用&实现后台运行场景下的数组数据追加时,初始同步版本代码如下:

#!/bin/bash

declare -a llenar

llen() {
  llenar+=("$1")
  return
}

for i in {1..10};do
  llen "$i"
done
wait

echo "${llenar[@]}"

同步执行上述代码可正常输出:1 2 3 4 5 6 7 8 9 10

如果在调用llen函数时添加&将任务放入后台运行,修改的代码片段如下:

...
  llen "$i" &
...

修改后执行脚本,数组没有任何输出,不符合预期。

问题原因

通过&启动的后台任务会运行在独立fork出的子Shell进程中,父子进程的内存空间完全隔离,子进程内部对llenar数组的修改仅在自身进程范围内生效,无法同步修改父进程中的同名数组。所有后台任务执行完成后,父进程中的llenar数组仍为空,因此没有输出。

解决方案

使用FIFO命名管道做跨进程数据传递即可解决该问题:让后台运行的子进程把需要追加的数据写入管道,父进程统一从管道读取数据写入自身维护的数组,绕开跨进程直接修改变量的限制。完整实现代码如下:

#!/bin/bash

declare -a llenar
mkfifo pipe

llen() {
  echo "$1" 
} > pipe 

for i in {1..100};do
  llen "$i" &
done

while read -r line;do
  llenar+=( "$line" )
done < pipe

wait
rm pipe

echo "data : ${llenar[@]}"
echo "data 1: ${llenar[1]}"
echo "length : ${#llenar[@]}"

内容的提问来源于stack exchange,提问作者jhoss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:12:21