shell(例如:bash shell)有shell变量的概念和环境变量的概念。
但是其他非shell进程的进程(例如:Firefox、gedit等)呢,这些进程是也有shell变量还是只有环境变量呢?
答案1
非 shell 进程没有 shell 变量。 C 程序有 C 变量,awk
程序有awk
变量,Perl 程序有 Perl 变量等等,这些都以自己的方式与 shell 变量有很大不同。
另一个进程没有 shell 变量(或无法访问 shell 变量)的原因是 shell 变量未导出(即它们不是环境变量),而且还因为某些 shell 允许将更多信息附加到 shell 变量,而不仅仅是一个 shell 变量。字符串值,例如只读变量、整数变量等的属性。这些类型属性(请参阅typeset
内置命令)不能应用于环境变量并被使用在另一个进程中。
一些 shell(例如bash
)还支持数组和关联数组。这些结构对于简单的键值对格式来说过于复杂,其中键(变量名称)和值都是强加于环境变量的纯文本字符串,这意味着它们无法导出以在通用环境中使用其他过程。
所有进程都可以访问从其父进程继承的环境变量。根据语言的不同,程序可以通过不同的方式访问这些内容。
例如,AC 程序可以使用getenv()
,awk
程序可以使用其关联数组ENVIRON
,Perl 程序可以使用其散列来访问环境变量。%ENV
我不知道gedit
,但是在 中vim
,您可以使用类似 shell 的语法访问环境变量:
:echo $HOME
例如。这里与shellecho
无关,只是碰巧以类似的方式工作。echo
此外,$HOME
字符串恰好是vim
向用户公开环境变量的方式。