bash - csh 中 "setenv"的范围与 bash 中的 "export"

标签 bash shell export csh setenv

据我所知,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/

相关文章:

PHP 将 Excel 导出到特定路径?

mysql - 从 MySQL 迁移到 mongo 的空值

linux - 为 mysql 输入转义 echo 中的引号

linux - 向我发送电子邮件并重启 tomcat 攻击 DDOS 的脚本

linux - 带有 if not 条件的 Bash 循环

xml - ActiveMQ 5.11.1 不断抛出EOFException 不发送消息

regex - gawk RS 仅在行首带有 ^

php - 我可以将 $_GET 参数传递给本地运行的脚本吗?

bash - 不使用rm命令递归删除目录

java - 如何使用 API 导出跑道中的评论部分