[root@SR18-151 lol]# vim hu.sh
#!/bin/bash
echo $$
evar=12345
保存
[root@SR18-151 lol]# ll
总用量 4
-rw-r--r-- 1 root root 31 8月 31 06:13 hu.sh
能否运行
source hu.sh √
. hu.sh √
./hu.sh ×
sh hu.sh √
添加权限
[root@SR18-151 lol]# chmod +x hu.sh
[root@SR18-151 lol]# ll
总用量 4
-rwxr-xr-x 1 root root 31 8月 31 06:13 hu.sh
进行测试
[root@SR18-151 lol]# echo $$
1227 当前bash进程号
[root@SR18-151 lol]# unset evar;source hu.sh;echo $evar
1227 当前进程没变
12345 脚本中变量能打印出来
[root@SR18-151 lol]# unset evar;. hu.sh;echo $evar
1227 当前进程没变
12345 脚本中变量能打印出来
[root@SR18-151 lol]# unset evar;sh hu.sh;echo $evar
1313 当前进程号改变
脚本中变量打印不出来
[root@SR18-151 lol]# unset evar;./hu.sh;echo $evar
1314 当前进程号改变
脚本中变量打印不出来
[root@SR18-151 lol]#
总结 source和.不改变当前进程号,./和sh改变当前进程号
source和.执行完脚本,脚本中变量能打印出来,./和sh执行完脚本,脚本变量打印不出来
本文通过实践演示了在Linux环境中使用source、.、sh及./等不同方式执行Shell脚本时,脚本内变量对外部环境的影响差异。总结发现,source和.命令执行脚本不会改变当前进程ID,并能使脚本内的变量在外部环境中生效;而通过sh或./执行脚本会创建新的子进程,脚本内的变量不会被导出到父进程中。
1397

被折叠的 条评论
为什么被折叠?



