export
为shell变量或函数设置导出属性。
概要
1 | export [-fn] [name[=word]]... |
主要用途
- 定义一到多个变量并设置导出属性。
- 修改一到多个变量的值并设置导出属性。
- 删除一到多个变量的导出属性。
- 显示全部拥有导出属性的变量。
- 为一到多个已定义函数新增导出属性。
- 删除一到多个函数的导出属性。
- 显示全部拥有导出属性的函数。
选项
1 | -f:指向函数。 |
参数
name(可选):变量名或已定义函数名。
value(可选):变量的值。
返回值
export返回true除非你提供了非法选项或非法名称。
例子
1 | 显示全部拥有导出属性的变量。 |
1 | 首先删除要演示的变量名 |
1 | 首先删除要演示的函数名 |
1 | 添加环境变量(JAVA)到`~/.bashrc` |
错误用法
- 对未定义的函数添加导出属性。
- 对没有导出属性的函数/变量执行删除导出属性操作。
- 在
--
后使用选项。
Q&A
Q:对变量或函数设置导出属性有什么用?
A:它们会成为环境变量,可以在脚本中访问它们,尤其是脚本中调用的子进程需要时。( 参考链接4 )
Q:如果我编写的脚本修改了已有的环境变量的值,那么执行它会在当前终端生效吗?会影响之前以及之后打开的终端吗?
A:只有通过source
方式调用的脚本会生效,您可以查看source
命令获得更多信息;其他方式只是在子shell中执行。
之前的不会影响,之后的除非是修改了~/.bashrc
这种启动终端时加载的脚本。( 参考链接1 )
Q:我脚本文件中调用~/.bashrc
中定义的函数和变量。为什么在新打开的终端中通过 sh
方式调用该脚本或直接运行
这个当前用户有执行权限的脚本却不能使用这些函数和变量?
A:请在~/.bashrc
文件中增加export它们的语句。另请参阅 知识点 段落。
Q:数组和关联数组也可以设置导出属性吗?
A:是可以的(如果你的bash支持它们),不过有些问题( 参考链接2 )。
Q:为什么我在查看变量或函数导出属性的时候显示的开头是declare
?
A:因为declare
也能够设置变量或函数的导出属性,详见declare
命令。
注意
- 该命令是bash内建命令,相关的帮助信息请查看
help
命令。
知识点
在info bash
或 bash在线文档 的
3.7.3
节提到了shell执行环境,其中涉及变量和函数的内容如下
- shell parameters that are set by variable assignment or with set or inherited from the shell’s parent in the environment
- shell functions defined during execution or inherited from the shell’s parent in the environment
那么第一句话中的参数又和变量有什么关系呢?在3.4
节第一段中提到:
A variable is a parameter denoted by a name.
变量是有名字的参数。
那么子shell确实继承了父shell中带有导出属性的变量或函数。
可参考链接: 执行脚本方式的区别
参考链接
扩展阅读
一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。查看已经存在的环境变量:
1 | [root@localhost ~]# export |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ITCENT' Blog!