当多个 shell 脚本修改“来源”变量时,它们是否会互相干扰?

当多个 shell 脚本修改“来源”变量时,它们是否会互相干扰?

如果我从并行运行的多个其他脚本中获取相同的 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.shfile-2.sh由于进程不同,您将具有不同的值。请注意,这source不会创建流​​程,源脚本可与流程环境file-1.sh一起使用file-2.sh

答案2

当您source使用 shell 脚本时,这意味着当前 shell 实例正在逐行读取脚本并当场执行命令,就好像您在命令行上输入了它们一样(如果您正在source从提示)或就像您已将它们复制并粘贴到脚本中一样(如果您是从脚本中获取)。

因此,不同的 shell 脚本file-1.shfile-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 发行版上的独立工具来捕获语法(和一些逻辑)错误。

相关内容