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

时间:2017-04-25 09:09:55

标签: linux bash shell

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

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

2 个答案:

答案 0 :(得分:0)

在被调用的脚本中只能访问导出的变量:

1.sh

#! /bin/bash
export exported=1
not_exported=2
2.sh

2.sh

#! /bin/bash
echo $exported
echo $not_exported

运行1.sh只输出1

您可以通过在呼叫之前分配变量来为导出一个变量:

not_exported=3 2.sh

答案 1 :(得分:0)

有三种方法可以使变量可供另一个脚本启动的脚本使用:

  • 标记要导出的变量(例如使用声明时或之后使用的export关键字,或使用x的{​​{1}}选项,{ {1}}或declare);

  • 将变量的赋值作为正在执行的命令的前缀(例如local),仅以空格分隔;

  • 使用typesetvarname=1 command and args调用子脚本,这会导致脚本被当前shell读取和解释,而不是作为单独的进程启动,因此会生成所有变量子脚本可用的当前上下文(包括局部变量)。

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

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