文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>bash中的普通变量与环境变量

bash中的普通变量与环境变量

时间:2010-08-04  来源:slimzhao

突然想到一个类比, 可以让对bash中的普通变量与环境变量的关系有一个清晰的区分:
把bash 看作是编程语言. 则bash的普通变量, 就相当于C语言中的普通变量, 如全局变量, 自动变量 而bash中的环境变量, 也正如C语言中使用的环境变量.
但bash的 A=asdf export A
可以容易地使作为bash脚本语言的变量晋级为环境变量. 也许正是这一点加剧了人们容易混淆这两种类型的变量, 从技术上说, 它们相当不同.

但, 如果产生一个子shell, 为什么可以读取父进程中同样的普通变量呢? 这个跟unix类操作系统的fork 实现有关, fork一个子进程时, 几乎是父进程的完全克隆. 正如你在C语言中, 调用fork后新产生的子进程, 同样有一份跟父进程一样的变量副本.
总之, bash中普通变量属于脚本语言的设计决定, 而环境变量则是进程执行环境定义的一部分.
等等, 你说产生子shell时, 因为fork的原因, 子shell才拥有了父进程中同样的普通变量, 那么windows上通过cygwin执行的bash呢, 呃, 真问住我了, 毕竟不同操作系统上父子进程之间的关系相当不同, unix中的fork几乎复制一切, 而windows的父子进程则复制的很少, 我真不知道, cygwin中的bash究竟使用了什么魔法, 也许是通过cygwin1.dll  的间接层, 达到了这一目的.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载