Bash “的范围”;setenv";在csh与;“出口”;在狂欢节上

Bash “的范围”;setenv";在csh与;“出口”;在狂欢节上,bash,shell,export,csh,setenv,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 echo $TEMP // this give me "Undefined Variable" 然而,如果我按相反的顺序做,它不会给

从我读到的内容来看,csh中的
setenv
和bash中的
export
是等效的。然而,我在处理这两个问题时发现了一些奇怪的问题

当我打开putty并开始键入时:

setenv TEMP yes
echo $TEMP  //this give me "yes"
然后我去bash并打字

echo $TEMP //this give me "yes" as well
echo $TEMP // this give me "Undefined Variable"
然而,如果我按相反的顺序做,它不会给出相同的结果。具体来说,当我首先进入bash并键入

export TEMP=no
echo $TEMP //this give me "no"
然后我回到csh并键入

echo $TEMP //this give me "yes" as well
echo $TEMP // this give me "Undefined Variable"
它不应该也给我“不”吗?我错过什么了吗


谢谢大家!

导出变量意味着将该变量的副本放入任何新创建的子进程的环境中。它是变量的副本;如果子进程修改变量,则父进程看不到修改。此外,如果子级导出变量,则该变量在父级中不可见

因此,您的两个案例是不对称的。在csh中启动时,导出一个变量,然后启动bash,bash将看到导出的变量。然后在bash中导出新变量并退出bash返回csh时,bash会话中创建的所有变量都将消失


如果您要在bash中导出一个变量,然后启动一个子csh(通过键入
csh
),您几乎肯定会看到导出的变量。

您所说的“然后我返回csh”是什么意思?你到底键入什么来“返回csh”?csh是我的登录shell,所以当我在bash中键入“exit”时,它会返回csh。导出变量时,该变量将导出到子变量,但不会导出到父变量。当您键入“退出”时,所有变量都会消失。如果您使用
csh
登录,那么答案显然就是RIC给出的答案。你说你是“按相反的顺序”这样做的,这意味着你从
csh
登录到
sh
,然后
bash/sh
登录到
csh
,得到了这个不寻常的结果。你应该在你的问题中把这一点弄清楚。这很有道理!非常感谢。