例如,假设我有script1.sh,我需要调用script2.sh。 script2.sh能否使用任何定义的script1.sh变量?如果是的话,如果我更深入一步并在script2.sh中调用script3.sh,是否可以访问script1.sh变量?
如果没有,为实现这一目标需要做些什么?
答案 0 :(得分:0)
在被调用的脚本中只能访问导出的变量:
#! /bin/bash
export exported=1
not_exported=2
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
),仅以空格分隔;
使用typeset
或varname=1 command and args
调用子脚本,这会导致脚本被当前shell读取和解释,而不是作为单独的进程启动,因此会生成所有变量子脚本可用的当前上下文(包括局部变量)。
请注意,标记变量以进行导出将导致将此变量复制到子进程的内存空间,然后此副本将独立于父shell的变量:在子进程中修改它将不会更改该值在父母身上。
使用source
或.
是导致子脚本修改父脚本中变量的唯一方法,因为子进程永远不能访问其父级的内存空间。