为什么更改脚本中的变量不会在脚本外更改它?

use*_*421 6 command-line bash environment-variables

假设我export是终端的变量。之后,我调用一个脚本,将该变量更改为其他内容。但是当我返回终端和echo变量时,它仍然是它的原始值。

我可以做,如果我要像改变的变量和外部可见的脚本,不仅有什么脚本中。这是我想说的一个例子:

ares@ares-HP-ProBook-4530s:~$ export package=tree
ares@ares-HP-ProBook-4530s:~$ cat script3.sh 

#! /bin/bash
#set -x
echo $package
apt-cache show $1 | head -1
if [ $? -eq 0 ]; then
    package=1
else
    package=0
fi
echo $package
Run Code Online (Sandbox Code Playgroud)

运行脚本时的输出

ares@ares-HP-ProBook-4530s:~$ ./script3.sh gnome-terminal
tree
Package: gnome-terminal
1
ares@ares-HP-ProBook-4530s:~$ echo $package
tree
ares@ares-HP-ProBook-4530s:~$ 
Run Code Online (Sandbox Code Playgroud)

Zok*_*oke 6

您的 shell 进程拥有父进程环境的副本,并且无法访问父进程的环境。当您的 shell 进程终止时,您对其环境所做的任何更改都将丢失。获取脚本文件是配置 shell 环境最常用的方法,您可能只想硬着头皮为两种 shell 中的每一种维护一个。

在这里找到了这个答案