定义bash变量时,带export和不带export之间的区别

时间:2020-03-21 11:43:21  来源:igfitidea点击:

我在~/.bashrc文件中添加了此“ export HISTCONTROL = ignoredups”行,以避免在Linux桌面上的Bash历史记录中出现重复的条目。

我们是否注意到我在HISTCONTROL变量前面加上了“ export”?
我们知道“export”选项有什么用吗?
如果我们想知道定义带和不带导出选项的bash变量之间有什么区别,请继续阅读!

定义带export和不带export的Bash变量之间的区别

我们使用export定义变量,以使其可用于所有子流程(或者子流程)。
意思是,如果我们使用如下所示的export定义变量,

export variable_name=value

该变量可用于从该Shell进程运行的任何子进程。

如果我们定义了一个不导出的变量,如下所示,

variable_name=value

该变量仅限于shell程序,不适用于任何其他子进程。
我们可以将其用于临时和/或者循环变量。

请允许我向我们展示一个示例,以便我们更好地理解它。

让我定义一个名为“ theitroad”的变量,而不使用“ export”,如下所示:

$theitroad="Welcome to theitroad.com blog!"

现在使用“ echo”命令显示该值:

$echo $theitroad

它将显示theitroad变量的值:

Welcome to theitroad.com blog!

现在,通过运行以下命令来启动新的Bash Shell会话:

$bash

然后,尝试使用“ echo”命令显示theitroad变量的值:

$echo $theitroad

看?
它不返回任何东西!我们只会看到空白输出。
因此证明了,当我们定义不带导出的变量时,子进程将无法使用它。

让我们再次使用export选项定义相同的变量:

$export theitroad="Welcome to theitroad.com blog!"

显示变量的值:

$echo $theitroad

输出示例:

Welcome to theitroad.com blog!

开始一个新的shell会话:

$bash

重试以显示变量的值:

$echo $theitroad

现在它将返回该值。

因此,export使该变量可用于该Shell环境中的任何其他子进程。