首页 理论教育 导出变量命令export和declare-x的使用方法

导出变量命令export和declare-x的使用方法

时间:2023-11-18 理论教育 版权反馈
【摘要】:执行exit,回到父shell,就是回到原来的shell,再执行echo$full_name,又可以得到预期的显示结果。内置命令export可以使子shell继承父shell的变量定义。再来理解一下图3-4。取消前面提到的变量age的导出,再运行脚本display_age.sh,就又像最开始一样,显示age的值为空:命令export -p和declare -xp的作用是显示当前shell中所有已经导出的变量。例如,在某Linux系统中,运行export -p,部分内容如下:

导出变量命令export和declare-x的使用方法

给一个变量赋值后,该变量只是在当前shell起作用,进入子shell后该变量就不起作用了。例如:

978-7-111-48202-4-Chapter04-117.jpg

上面的例子,给字符串变量full_name赋值,显示出了其内容。执行bash后,就进入子shell,子shell中的变量full_name没有定义。执行exit,回到父shell,就是回到原来的shell,再执行echo$full_name,又可以得到预期的显示结果。

内置命令export可以使子shell继承父shell的变量定义。下面先定义变量,再将变量导出(export),进入子shell后,再查看变量的值,可见子shell继承了父shell的变量定义:

978-7-111-48202-4-Chapter04-118.jpg

上面例子的前两条命令可以合为一条,export<变量名>=<值>,即:

978-7-111-48202-4-Chapter04-119.jpg

在shell terminal里运行一个脚本时,脚本当中的命令是在一个子shell里面运行,它与父shell不是同一个shell,见图3-4。

再来理解一下图3-4。看个例子,脚本display_age.sh用来显示age的值:

978-7-111-48202-4-Chapter04-120.jpg

下面定义age为25,再执行脚本:(www.xing528.com)

978-7-111-48202-4-Chapter04-121.jpg

age的值没有显示出来。因为age=25是在当前shell里面定义的,而脚本display_age.sh中的命令echo"age=$age"是在一个子shell里面运行,当前shell的age并不影响其子shell的age。也可以说:子shell的age和当前shell的age不是同一个变量,脚本display_age.sh中并未对age赋值,所以显示age的值为空。在age=25的前面加上export,再执行脚本:

978-7-111-48202-4-Chapter04-122.jpg

这时,当前shell的变量age被导出,对子shell可见,脚本display_age.sh中的echo命令就可以显示age的值了。

export可以使变量的定义“穿透”多层shell。它不仅使父shell的变量定义导入到子shell,还可以导入到子shell的子shell,可以一直继承下去,如果有多层子shell的话。

运行命令declare-x<变量名>也可以导出变量,效果与命令export<变量名>相同。

就像set的逆命令是unset,export的逆命令是export-n,选项-n的作用是取消变量的导出。取消前面提到的变量age的导出,再运行脚本display_age.sh,就又像最开始一样,显示age的值为空:

978-7-111-48202-4-Chapter04-123.jpg

命令export -p和declare -xp的作用是显示当前shell中所有已经导出的变量。例如,在某Linux系统中,运行export -p,部分内容如下:

978-7-111-48202-4-Chapter04-124.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈