export

    主要用途

    • 定义一到多个变量并设置导出属性。
    • 修改一到多个变量的值并设置导出属性。
    • 显示全部拥有导出属性的变量。
    • 为一到多个已定义函数新增导出属性。
    • 删除一到多个函数的导出属性。
    • 显示全部拥有导出属性的函数。
    1. -f:指向函数。
    2. -n:删除变量的导出属性。
    3. -p:显示全部拥有导出属性的变量。
    4. -pf:显示全部拥有导出属性的函数。
    5. -nf:删除函数的导出属性。
    6. --:在它之后的选项无效。

    参数

    name(可选):变量名或已定义函数名。

    value(可选):变量的值。

    export返回true除非你提供了非法选项或非法名称。

    1. # 首先删除要演示的变量名
    2. #unset a b
    3. # 定义变量的同时增加导出属性
    4. export a b=3
    5. # 当然也可以先定义后增加导出属性
    6. export b
    7. # 修改拥有导出属性的变量的值
    8. # 当然也可以直接赋值修改
    9. a=5;b=7
    10. # 删除变量的导出属性
    11. export -n a b
    1. # 添加环境变量(JAVA)到`~/.bashrc`
    2. PATH=/usr/local/jdk1.7.0/bin:$PATH
    3. # 添加当前位置到动态库环境变量
    4. export LD_LIBRARY_PATH=$(pwd):${LD_LIBRARY_PATH}

    错误用法

    • 对未定义的函数添加导出属性。
    • 对没有导出属性的函数/变量执行删除导出属性操作。
    • 在 后使用选项。

    Q:对变量或函数设置导出属性有什么用?

    A:它们会成为环境变量,可以在脚本中访问它们,尤其是脚本中调用的子进程需要时。(

    Q:如果我编写的脚本修改了已有的环境变量的值,那么执行它会在当前终端生效吗?会影响之前以及之后打开的终端吗?

    Q:我脚本文件中调用~/.bashrc中定义的函数和变量。为什么在新打开的终端中通过 sh 方式调用该脚本或直接运行

    这个当前用户有执行权限的脚本却不能使用这些函数和变量?
    A:请在~/.bashrc文件中增加export它们的语句。另请参阅 知识点 段落。

    Q:数组和关联数组也可以设置导出属性吗?

    A:是可以的(如果你的bash支持它们),不过有些问题( )。

    Q:为什么我在查看变量或函数导出属性的时候显示的开头是declare

    A:因为declare也能够设置变量或函数的导出属性,详见declare命令。

    1. 该命令是bash内建命令,相关的帮助信息请查看help命令。

    info bash或 的 3.7.3节提到了shell执行环境,其中涉及变量和函数的内容如下

    A variable is a parameter denoted by a name.

    变量是有名字的参数。

    那么子shell确实继承了父shell中带有导出属性的变量或函数。

    可参考链接: 执行脚本方式的区别

    1. 关于bashrc profile文件的讨论
    2. export -pf用法