非 shell 进程是否有 shell 变量?

非 shell 进程是否有 shell 变量?

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向用户公开环境变量的方式。

相关内容