linux - 当在另一个脚本中运行bash脚本时,父脚本中定义的所有变量是否都会继承给子脚本?

标签 linux bash shell

例如,假设我有 script1.sh,我需要调用 script2.sh。 script2.sh 能够使用 script1.sh 定义的任何变量吗?如果是,如果我更深入地在 script2.sh 中调用 script3.sh,是否可以访问 script1.sh 变量?

如果没有,需要做什么才能实现这一目标?

最佳答案

可以通过三种方式使变量可供另一个脚本启动的脚本使用:

  • 标记要导出的变量(例如在声明时或声明后使用 export 关键字,或者使用 xdeclarelocal 的 - typeset 选项);

  • 将变量的赋值作为正在执行的命令的前缀(例如 varname=1 command and args ),仅用空格分隔;

  • 使用 source 调用子脚本或. ,这会导致脚本由当前 shell 读取和解释,而不是作为单独的进程启动,因此使当前上下文的所有变量(包括局部变量)可供子脚本使用。

请注意,将变量标记为导出将导致该变量被复制到子进程的内存空间,然后该副本将独立于父 shell 的变量:在子进程中修改它不会更改其值在父级中。

使用source.这是导致子脚本修改父脚本中变量的唯一方法,因为子进程永远无法访问其父进程的内存空间。

关于linux - 当在另一个脚本中运行bash脚本时,父脚本中定义的所有变量是否都会继承给子脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43606290/

相关文章:

perl - 合并来自不同文件的列

linux - 内核如何区分线程和进程

c++ - valgrind 在主机名命令输出中显示内存泄漏

linux - 检查字符串索引是否存在

linux - 在 shell 脚本中使用字符串中的变量

linux - 删除文件编码标记但保留其编码

linux - 服务器端 CGI 编程的版本控制

linux - CentOS中bash启动时如何自动设置别名?

shell - 一个月中的一周

java - 无法找到或加载主类 - 对于任何程序