跨多个 shell 脚本共享变量

Kal*_*aly 7 bash shell-script

我试图在一个大型 shell 脚本中总结多个 shell 脚本,例如:

#!/bin/sh
bash script1.sh
bash script2.sh
bash script3.sh
Run Code Online (Sandbox Code Playgroud)

所有脚本共享相同的变量varvar2. 我想从单个 shell 脚本中删除变量定义并将其放入大型 shell 脚本中,这样当我更改变量的值时,我只需要做一次。

但是,当我这样做时

#!/bin/sh
var1="1"
var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
Run Code Online (Sandbox Code Playgroud)

引用$var1$var2单个 shell 脚本中无法识别这些变量。

如果之前有人问过这个问题,我很抱歉,我一般不熟悉脚本,不知道要搜索什么。

知道如何使用多个变量输入循环脚本也很高兴,例如

var1="1 2 3 4 5"
var2="a b c d e"
for i in $var1;do for j in $var2;do
script1.sh
script2.sh
done;done
Run Code Online (Sandbox Code Playgroud)

Jos*_*lly 14

当您在主脚本中运行脚本 1-3 时,它们每个都在自己的子 shell 中运行,这就是它们无法识别在其父 shell 中定义的变量的原因。使用export使变量提供给子壳:

#!/bin/sh
export var1="1"
export var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
Run Code Online (Sandbox Code Playgroud)

另一种选择(与您的第二个问题相关)是将变量作为位置参数传递给脚本:

#!/bin/sh
var1="1"
var2="2"
bash script1.sh "$var1" "$var2"
bash script2.sh "$var1" "$var2"
bash script3.sh "$var1" "$var2"
Run Code Online (Sandbox Code Playgroud)

在脚本1-3,这些变量然后可作为$1$2分别。