导出无法在我的shell脚本中工作

Xan*_*der 39 linux variables shell terminal

我有两个脚本1.sh和2.sh.

1.sh如下:

#!/bin/sh
variable="thisisit"
export variable
Run Code Online (Sandbox Code Playgroud)

2.sh如下:

#!/bin/sh
echo $variable
Run Code Online (Sandbox Code Playgroud)

根据我读到的内容,这样做(导出)可以从一个shell脚本中访问另一个shell脚本中的变量.但这不适用于我的脚本.有人可以帮忙吗 提前致谢.

lin*_*asy 86

如果你正在执行你的文件sh 1.sh,./1.sh那么你正在子shell中执行它.

如果您希望在当前shell中进行更改,则可以执行以下操作:

. 1.sh
# OR
source 1.sh
Run Code Online (Sandbox Code Playgroud)

请考虑浏览参考文档.

"当使用source[或.]运行脚本时,它会在现有shell中运行,脚本完成后,脚本创建或修改的任何变量都将保持可用.相反,如果脚本同样运行filename,则单独的子shell(带有将产生完全独立的变量集来运行脚本."

  • @Xander:如果源代码不适合你,你可以使用`<dot><space><your program name>` (2认同)
  • 可能值得添加指向[参考文档](http://ss64.com/bash/source.html)及其描述的链接:“当脚本使用`source` [或`.`]运行时,它将在在现有的shell中,脚本完成后由脚本创建或修改的任何变量将保持可用;相反,如果脚本仅以`filename`的身份运行,则将产生一个单独的子shell(具有一组完全独立的变量)。运行脚本。” (2认同)

Fre*_*Foo 7

export将变量放入执行shell的环境中,以便将其传递给脚本执行的进程,但不传递给调用脚本或任何其他进程的进程.尝试执行

#!/bin/sh
FOO=bar
env | grep '^FOO='
Run Code Online (Sandbox Code Playgroud)

#!/bin/sh
FOO=bar
export FOO
env | grep '^FOO='
Run Code Online (Sandbox Code Playgroud)

看到的效果export.

为了充分利用变1.sh2.sh,或者调用2.sh1.sh或进口1.sh2.sh:

#!/bin/sh
. ./1.sh
echo $variable
Run Code Online (Sandbox Code Playgroud)