给一个变量赋值后,该变量只是在当前shell起作用,进入子shell后该变量就不起作用了。例如:
上面的例子,给字符串变量full_name赋值,显示出了其内容。执行bash后,就进入子shell,子shell中的变量full_name没有定义。执行exit,回到父shell,就是回到原来的shell,再执行echo$full_name,又可以得到预期的显示结果。
内置命令export可以使子shell继承父shell的变量定义。下面先定义变量,再将变量导出(export),进入子shell后,再查看变量的值,可见子shell继承了父shell的变量定义:
上面例子的前两条命令可以合为一条,export<变量名>=<值>,即:
在shell terminal里运行一个脚本时,脚本当中的命令是在一个子shell里面运行,它与父shell不是同一个shell,见图3-4。
再来理解一下图3-4。看个例子,脚本display_age.sh用来显示age的值:
下面定义age为25,再执行脚本:(www.xing528.com)
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,再执行脚本:
这时,当前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的值为空:
命令export -p和declare -xp的作用是显示当前shell中所有已经导出的变量。例如,在某Linux系统中,运行export -p,部分内容如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。