我打算写一个脚本,它看起来没有区别:
export k=1
Run Code Online (Sandbox Code Playgroud)
和
k=1
Run Code Online (Sandbox Code Playgroud)
我对吗?
Mih*_*eac 21
我创建了一个简单的脚本来显示差异:
$ cat script.sh
echo $answer
Run Code Online (Sandbox Code Playgroud)
让我们试试吧 export
$ answer=42
$ ./script.sh
$ . script.sh
42
Run Code Online (Sandbox Code Playgroud)
只有在使用相同的进程执行脚本(即同一个bash
实例,使用source
/ .
)时才知道该值
现在,使用export
:
$ export answer=42
$ ./script.sh
42
$ . script.sh
42
Run Code Online (Sandbox Code Playgroud)
该值是子进程已知的.
因此,如果您希望子进程知道变量的值,那么您应该使用export
.
cda*_*rke 14
即使在Windows上,每个进程都有一个称为环境块的内存块,它包含环境变量.创建新进程时,默认情况下,父进程的环境块将复制到子进程,因此环境变量是将文本数据传递给子进程的简单方法.
该export
命令创建环境变量,或将普通局部变量转换为环境变量.在C-shell中,它的少数兑换功能之一是它使用不同的语法环境变量(setenv
)到局部变量(set
).Bourne shell衍生品,如Bash和Korn shell,隐藏了所有这些.
目前,只能传递简单的值,因此不支持像数组这样的项目(它只导出第一个元素).define
除非子进程是相同类型的shell,即bash的另一个实例,否则也不会导出使用set设置的变量属性.这也适用于导出的函数,尽管有时可能会在不同类型的shell(使用eval
)之间进行破解.
在Bash(和其他人)中有一个shell设置被调用allexport
,这意味着所有变量都是环境变量 - 一般来说可能是一个坏主意.您可以使用C语言提供不同的environemnt块execve
,但是从shell中您需要一个程序env
,请参阅man env
详细信息.
归档时间: |
|
查看次数: |
5471 次 |
最近记录: |