源代码和Linux脚本的./执行之间的区别

| csh:
set a=0 
echo \"a is $a\"
当我做./my_script.csh输出是:
a is 
当我做源my_script.csh输出是:
a is 0 
为什么会这样呢。据我所知./执行使用新的外壳。     
已邀请:
检查是否在当前shell中设置了变量“ a”:
set | grep \'^a=\'
请记住,一旦您将脚本源到当前的shell, 它所有的全局变量都存在,直到未设置或退出当前shell。 您可能要启动一个新的shell,提供脚本,结束退出shell以执行有效的测试。 我不知道您遇到的问题的背景,但是您可能希望导出一些关键变量,以使其在每个子流程中都有其副本。     
没错,。/ my_script.csh启动一个新的shell,并使用#!您应该在文件顶部具有选择要运行的外壳程序(在本例中为csh)。 源my_script.csh在当前shell中运行脚本。 如果脚本在例如bash shell中错误运行,则set a = 0并不是在bash中设置环境变量的语法,因此该代码将无法正常工作,因为您正在使用错误的外壳。 看看#!在文件的顶部。这是对的吗?     

要回复问题请先登录注册