Bash “的范围”;setenv";在csh与;“出口”;在狂欢节上
从我读到的内容来看,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" 然而,如果我按相反的顺序做,它不会给
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
,得到了这个不寻常的结果。你应该在你的问题中把这一点弄清楚。这很有道理!非常感谢。