bash 函数变量在后台运行时是并行安全的吗?

Are bash function variables parallel-safe when backgrounded?

#!/bin/bash

function foo {
   bar=$(cmd_1 )
   baz=$(cmd_2 )
   combine_results $bar $baz
}

for arg in $(get_arg_list);
do
   foo &
done

barbaz 的多个实例是否可以在 foo & 多次 运行 时互相破坏?或者这些变量是每个实例的局部变量?

Are bash function variables parallel-safe when backgrounded?

是的。

Can the multiple instances of bar and baz clobber each other when foo & is run many times?

没有。 (假设 cmd_1cmd_2combine_results 本身是“并行安全”执行的,因为它们不会输出“破坏”的结果)。所有 foo 进程写入相同的输出 - 输出可能是交错的(但不是“混乱的”,如“无效”或某些不确定的输出)。

Or are these variables local to each instance?

是的。 (本地,如进程本地。变量是全局的,即 ( foo ; echo $bar ) & 将打印函数内部设置的 bar 的值)。

每个子shell都是一个单独的进程,有自己的进程space和独立的execution environment

你的变量扩展没有被引用。 for i in $(...) 是一种常见的 模式。请注意,您 不是 将任何参数传递给您的函数 - 未设置并且扩展为空。使用 shellcheck.net 检查您的脚本。