据我所知,csh 中的 setenv
和 bash 中的 export
是等价的。但是,我在与两者一起工作时发现了一些奇怪的问题。
当我打开 putty 并开始输入时:
setenv TEMP yes
echo $TEMP //this give me "yes"
然后我去 bash 并输入
echo $TEMP //this give me "yes" as well
但是,如果我以相反的顺序执行,则不会给出相同的结果。具体来说,当我先进入 bash 并输入
export TEMP=no
echo $TEMP //this give me "no"
然后我回到csh并输入
echo $TEMP // this give me "Undefined Variable"
它不应该也给我“不”吗?我错过了什么吗?
谢谢!
最佳答案
导出变量意味着将该变量的副本放入任何新创建的子进程的环境中。它是变量的副本;如果子进程修改了变量,则父进程看不到修改。此外,如果子项导出变量,则它不会在父项中可见。
因此,您的两个案例是不对称的。当您在 csh 中启动,导出一个变量,然后启动 bash 时,bash 会看到导出的变量。当您随后在 bash 中导出一个新变量并退出 bash 以返回到 csh 时,在 bash session 中创建的所有变量都会消失。
如果您要在 bash 中导出一个变量,然后启动子 csh(通过键入 csh
),您几乎肯定会看到导出的变量。
关于bash - csh 中 "setenv"的范围与 bash 中的 "export",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17351010/