如果我从并行运行的多个其他脚本中获取相同的 shell 脚本,并修改源脚本中定义的 shell 变量,采购脚本会混淆彼此的变量值吗?
例子 :
source.sh
#!/bin/bash some_value=$1+10
file-1.sh
#!/bin/bash source ./source.sh 5 ./some-script $some_value
file-2.sh
#!/bin/bash source ./source.sh 10 ./some-script.sh $some_value
答案1
$some_value
您拥有的环境或 shell 变量与定义它们的进程一样多。
然后,如果您同时启动file-1.sh
,file-2.sh
由于进程不同,您将具有不同的值。请注意,这source
不会创建流程,源脚本可与流程环境file-1.sh
一起使用file-2.sh
。
答案2
当您source
使用 shell 脚本时,这意味着当前 shell 实例正在逐行读取脚本并当场执行命令,就好像您在命令行上输入了它们一样(如果您正在source
从提示)或就像您已将它们复制并粘贴到脚本中一样(如果您是从脚本中获取)。
因此,不同的 shell 脚本file-1.sh
都file-2.sh
表现为具有本地定义的 shell 变量,该变量some_value
在两种情况下只是巧合地具有相同的名称。即使您并行运行这两个脚本,它们也不会相互了解任何信息,因此它们之间不存在交叉交互 - 正在file-1.sh
运行的子 shell 不知道正在file-2.sh
运行的子 shell也恰好定义了一个变量some_value
。
作为旁注,您尝试创建一个算术表达式为
some_value=$1+10
不会达到你想象的效果。因为file-1.sh
它会5+10
按字面意思屈服,因为 file-2.sh
它会按10+10
字面意思屈服。为了执行算术评估,您必须将其放入算术展开式中,如下所示
some_value=$(($1+10))
我建议检查 shell 脚本shellcheck
,也可作为许多 Linux 发行版上的独立工具来捕获语法(和一些逻辑)错误。