【问题标题】:Make variables exist outside a shell script使变量存在于 shell 脚本之外
【发布时间】:2021-10-11 03:11:21
【问题描述】:

我正在尝试在不使用源代码的情况下使变量退出 shell 脚本。 变量在 shell 脚本中声明为

export varA=3

然后我使用./filename.sh 运行脚本

我想要

echo $varA

在终端中返回 3(即 varA 的值)。所以将变量的作用域扩展到脚本之外

总结一下:如何让shell脚本里面的变量存在外面。

提前谢谢你

【问题讨论】:

  • 不使用“来源”?你没有。贝壳的设计使这不起作用。如果由于某种原因您无法获取脚本本身,则让它输出另一个文件,该文件仅包含 VAR=some_value 之类的行,然后 source that
  • 哦,好吧,所以我也不能只对一个变量使用源代码? source 是否仅适用于文件?
  • 通常,当您运行脚本时,它会在子 shell 中执行,这意味着在与您调用它的终端不同的环境中运行。 (它会在您启动脚本时复制环境变量,但即使脚本更改它们也不会将它们复制回来。)当您获取脚本时,它会在与您的终端相同的环境中运行该脚本(或您调用它的任何地方)从)。因此,如果您想要一个脚本来更新您的环境变量,您必须获取它。
  • 运行 bash 脚本不像尝试在大多数编程语言中调用函数那样工作。如果你试图让它成为那样,你的生活将是痛苦的。如果您只想返回一个值,则让脚本将其打印到标准输出并将输出放入变量中。
  • 另外,您永远不需要在变量上使用“源”。您只需设置变量。该概念仅适用于运行脚本。无来源:不同的环境。来源:相同的环境。

标签: bash shell terminal scope sh


【解决方案1】:

您可以通过这种方式运行您的脚本:

. ./filename.sh

这意味着在运行时它不会产生新的 shell,而是在当前运行它。您在脚本中设置的变量将在您的 shell 中可用。这是 cmets 中提到的一种“来源”。

【讨论】: