我正在编写一个脚本:
#script_1.sh
function a() {
export var1='...some calculations on $@...';
}
function b() {
a "$@"
local loc_b=$var1
}
function c() {
a "$@"
local loc_c=$var1
}
#script_2.sh
source script_1.sh
b val1 &
c val2 &
b val2 &
function a
具有getopt
命令并解析b
和c
的参数。这已经大大简化了。
当我作为后台进程在最后再次调用function b
,function c
和function b
时,我担心将exported var1 variable
分配给局部变量。
如果我可以保证对function b
或function c
的调用将作为后台进程,那么我是否需要担心此处的竞争状况?
如果没有种族,我可以不声明每个函数的局部变量而逃脱吗?
答案 0 :(得分:3)
每个后台进程都有自己的环境副本。子进程不能更改其父进程的环境。因此,没有竞争条件:如果在运行后台进程之前更改了全局变量,则该进程将复制新值。如果您在更改值之前运行后台进程,则该进程将看到旧值。
#!/bin/bash
global=1
inc () {
((++global))
echo inc: $global
}
dec () {
((--global))
echo dec: $global
}
inc & dec &
# 2 0
global=10
inc & dec & inc & dec &
# 11 9 11 9