subShell
意为子Shell
。
subShell
不是子进程
。父Shell
和子Shell
的pid
相同。
你可以把subShell
理解为沙盒
或者命令空间
, 在subShell
中的一切操作都不会影响父Shell
。
$(COMMAND LIST)
中的命令以subShell
执行。
$(COMMAND LIST)
等效于`COMMAND LIST`
示例:
currentDir="$(cd "$(dirname "$0")";pwd)"
(COMMAND LIST)
中的命令以subShell
执行。
示例:
bash <<EOF
cd ~;
pwd;
echo "------";
(pwd;cd /;pwd)
echo "------";
pwd
EOF
运行结果:
/Users/leleliu008
------
/Users/leleliu008
/
------
/Users/leleliu008
以bash FILE
方式执行脚本,不是以subShell
运行,而是以新进程
运行。
以source FILE
方式执行脚本,不是以subShell
运行,而是在当前Shell
中运行。