我打算写一个脚本,它看起来没有区别:
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 次 |
| 最近记录: |