2

从 BASH 页面:

当脚本使用 source运行时,它在现有的 shell中运行,脚本创建或修改的任何变量在脚本完成后仍然可用。相反,如果脚本只是作为文件名运行,那么将生成一个单独的子shell(具有一组完全独立的变量)来运行脚本。

但是如果我跑步会发生什么

. myscript &

在这种情况下它是否作为子外壳运行?. myscript &和有什么区别./myscript &

4

1 回答 1

4

是的 - 你可以很容易地测试这个:

源文件:

echo "Source File"
echo "Source PID - $BASHPID"
MYVAR=someval

执行文件:

. source 

echo "Exec PID -$BASHPID"
echo $MYVAR
echo done

输出:

Source File
Source PID - 34893
Exec PID - 34893
someval
done

如果在execute文件中使用&. source执行顺序不同,进程关联的PID也不同,可以看到MYVAR源文件中设置的变量没有打印出来:

Exec PID - 34931

done
Source File
Source PID - 34932
于 2014-08-27T10:07:03.510 回答