首页 > 解决方案 > Linux 环境变量的范围

问题描述

有人可以在以下 4 个示例中解释环境变量范围的差异吗?

❯❯❯ b=1 echo $b

❯❯❯ b=1; echo $b
1
❯❯❯ 
❯❯❯ cat gen.sh
#!/bin/bash
echo $a
❯❯❯ 
❯❯❯ a=1 ./gen.sh
1
❯❯❯ a=1; ./gen.sh

标签: linuxscopeenvironment-variablesecho

解决方案


  1. $parameters 的扩展是在执行命令之前使用当前环境完成的。

  2. 分配参数不会自动将其导出到子进程(命令),而只会在随后调用命令时(在其命令行中,根据规则 #1)。

  3. 但是,“a=b 命令”形式的命令具有导出到命令的分配,但只是暂时的 - 仅用于单个命令调用。

鉴于上述三个规则:

❯❯❯ b=1 回声 $b

首先翻译为: b=1 echo ""
... 并且什么也不打印。

❯❯❯ b=1; 回声 $b

有效,因为有两个不同的命令,就好像它们放在两条不同的行上一样。第一个是展开并设置一个变量;然后第二个被扩展。

#!/bin/bash
echo $a

(此脚本打印在环境中找到的 $a)。

❯❯❯ a=1 ./gen.sh

这是有效的,因为 a=1 被导出,所以 gen.sh 在环境中找到它。

❯❯❯ a=1; ./gen.sh

这不起作用,因为设置了 a=1 但未导出到子进程;所以 gen.sh 启动但在环境中找不到 $a 。以下将起作用:

❯❯❯导出a=1;./gen.sh


推荐阅读