我可以在bash中为多个并行后台进程使用相同的变量名吗?

问题描述:

在下面的shell脚本中,我想在后台并行运行2条命令来加速进程,等待它们完成,然后继续运行更多命令。我可以在bash中为多个并行后台进程使用相同的变量名吗?

因为我在两个循环中使用相同的变量名称(DATASERVERNAME),这些变量是否会在后台互相干扰?我应该在每个循环中使用不同的变量名称,例如DATASERVERNAME_SYBASE,DATASERVERNAME_ORACLE吗?

#!/bin/bash 
while read DATASERVERNAME 
do 
    some commands here 
done < sybase_data_servers.txt & 

while read DATASERVERNAME 
do 
    some commands here 
done < oracle_data_servers.txt & 

wait 

some more commands here 

你的脚本是安全的,因为你可以通过一个小实验揭示:

#!/bin/sh -eu 
echo A > a 
echo B > b 

X=0 

while read X 
do 
    echo X=$X 
done < a & 
wait 

echo X=$X 

while read X 
do 
    echo X=$X 
done < b & 
wait 



echo X=$X 

脚本输出:

X=A 
X=0 
X=B 
X=0 

在背景执行的循环在不同的进程中运行($BASHPID应该反映过)。