subShell
1.1、subShell简介

subShell意为子Shell

subShell不是子进程父Shell子Shellpid相同。

你可以把subShell理解为沙盒或者命令空间, 在subShell中的一切操作都不会影响父Shell

1.2、什么时候会创建subShell
1.2.1、$(COMMAND LIST)

$(COMMAND LIST)中的命令以subShell执行。

$(COMMAND LIST)等效于`COMMAND LIST`

示例:

currentDir="$(cd "$(dirname "$0")";pwd)"
1.2.2、(COMMAND LIST)

(COMMAND LIST)中的命令以subShell执行。

示例:

bash <<EOF
cd ~;
pwd;
echo "------";
(pwd;cd /;pwd)
echo "------";
pwd
EOF

运行结果:

/Users/leleliu008
------
/Users/leleliu008
/
------
/Users/leleliu008
1.3、注意

bash FILE方式执行脚本,不是以subShell运行,而是以新进程运行。

source FILE方式执行脚本,不是以subShell运行,而是在当前Shell中运行。