Linux环境变量的范围

问题描述 投票:0回答:1

谁能解释一下以下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
linux scope environment-variables echo
1个回答
1
投票
  1. $parameters的扩展是在执行命令之前,利用当前环境进行的。

  2. 赋值参数不会自动 出口 的子进程(命令),但只有在随后的 调用 的命令(在其命令行中,根据规则#1)。

  3. 但是,"a=b命令 "形式的命令,其赋值会被导出到命令中,但只是暂时的--只适用于该单条命令的调用。

鉴于上述三个规则。

❯ b=1 echo$b

首先被翻译成:b=1 echo ""......并且不打印任何内容。

❯ b=1; echo $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

© www.soinside.com 2019 - 2024. All rights reserved.