linuxshell中“.”和“.”执⾏的区别详解
⽬前注意到的区别主要在于环境变量的作⽤域上:
1. 如果使⽤" ./ " 执⾏,可以理解为程序运⾏在⼀个全新的shell中,不继承当前shell的环境变量的值,同时若在程序中改变了当前shell中的环境变量(不使⽤export),则当前shell的环境变量值不变。
2. 如果使⽤” . "执⾏,则程序继承当前shell中的环境变量,同时,若在程序中改变了当前shell中的环境变量(不使⽤export),则当前shell中该环境变量的值也会改变
另外⼀个区别点在于, “ ./ "只能⽤于拥有执⾏权限的⽂件,⽽ ” . " 则可以暂时提升
example:
1. 有如下脚本⽂件  test.sh
# pre value
echo 'pre is :' $VAL_TS
# change the value
VAL_TS='world'
# post value
echo 'post is :' $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
#结果
pre is :              #脚本程序没有继承当前shell中的 VAL_TS的值
post is : world          #进⾏完修改之后,其值为 ‘world'
user@pc:~$ echo $VAL_TS      #在shell中再次输出 VAL_TS 的值
#结果
hello                #虽然在 test.h 中改变了变量 VAL_TS 的值,但并不能作⽤到shell中
user@pc:~$ . test.sh        #使⽤ ' . ' 执⾏脚本 test.sh
#结果
pre is : hello          #脚本程序中继承了 shell中的 VAL_TS 值
post is : world          #进⾏修改完成后,值变为 ‘world'
linuxshell脚本怎么运行user@pc:~$ echo $VAL_TS      #在shell中输出 VAL_TS 的值
#结果
world                #脚本程序中的修改作⽤到了shell中
总结:
个⼈理解:
1. " ./ “ 的⽅式类似于新建了⼀个shell,在这个新建的shell中去执⾏脚本中的程序,类似于新建了⼀个⼦进程,但这个⼦进程不继承⽗进程的所有⾮export类型的变量,并且脚本中对⾮export环境变量的创建或修改不会反馈到外部调⽤shell中
2. ” . " 的⽅式类似于将脚本中的每⼀⾏指令逐条在当前shell中执⾏,因此它继承了当前shell的环境变量,同时脚本中对环境变量的修改也可以反馈到shell中
到此这篇关于linux shell中“.” 和 “./”执⾏的区别详解的⽂章就介绍到这了,更多相关shell“.” 和 “./”内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。