linux shell中“.” 和 “./”执行的区别详解
目前注意到的区别主要在于环境变量的作用域上:
1.如果使用"./"执行,可以理解为程序运行在一个全新的shell中,不继承当前shell的环境变量的值,同时若在程序中改变了当前shell中的环境变量(不使用export),则当前shell的环境变量值不变。
2.如果使用”."执行,则程序继承当前shell中的环境变量,同时,若在程序中改变了当前shell中的环境变量(不使用export),则当前shell中该环境变量的值也会改变
另外一个区别点在于,“./"只能用于拥有执行权限的文件,而”."则可以暂时提升
example:
1.有如下脚本文件 test.sh
#prevalue echo'preis:'$VAL_TS #changethevalue VAL_TS='world' #postvalue echo'postis:'$VAL_TS
2.在当前shell中执行如下命令:
user@pc:~$VAL_TS='hello'#定义变量VAL_TS其值为:hello user@pc:~$echo$VAL_TS#输出变量VAL_TS的值 #结果 hello user@pc:~$./test.sh#使用'./'执行脚本test.sh #结果 preis:#脚本程序没有继承当前shell中的VAL_TS的值 postis:world#进行完修改之后,其值为‘world' user@pc:~$echo$VAL_TS#在shell中再次输出VAL_TS的值 #结果 hello#虽然在test.h中改变了变量VAL_TS的值,但并不能作用到shell中 user@pc:~$.test.sh#使用'.'执行脚本test.sh #结果 preis:hello#脚本程序中继承了shell中的VAL_TS值 postis:world#进行修改完成后,值变为‘world' user@pc:~$echo$VAL_TS#在shell中输出VAL_TS的值 #结果 world#脚本程序中的修改作用到了shell中
总结:
个人理解:
1."./“的方式类似于新建了一个shell,在这个新建的shell中去执行脚本中的程序,类似于新建了一个子进程,但这个子进程不继承父进程的所有非export类型的变量,并且脚本中对非export环境变量的创建或修改不会反馈到外部调用shell中
2.”."的方式类似于将脚本中的每一行指令逐条在当前shell中执行,因此它继承了当前shell的环境变量,同时脚本中对环境变量的修改也可以反馈到shell中
到此这篇关于linuxshell中“.”和“./”执行的区别详解的文章就介绍到这了,更多相关shell“.”和“./”内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!