( CMD1 ; CMD2 ; … ) 和 { CMD1 ; CMD2 ; … ; } 都可以将多个命令组合在一起,批量执行
$ man bash
( list ) 会开启子 shell,并且 list 中变量赋值以及内部命令执行后,将不再影响后续的环境, 帮助查看:man bash,搜索(list) { list; } 不会开启子 shell,在当前 shell 中运行,会影响当前 shell 环境, 帮助查看:man bash,搜索 { list; }(注意有分号,退出{})
范例:() 和 {}
$ name=zhong ; ( echo $name;name=zzw;echo $name ) ; echo $name
zhong
zzw
zhong
$ name=zhong ; { echo $name;name=zzw;echo $name; } ; echo $name
zhong
zzw
zzw
$ umask
0022
$ ( umask 066;touch f1.txt ) ; ls -l f1.txt
-rw------- 1 root root 0 May 15 20:45 f1.txt
$ umask
0022
# ( ) 会开启子Shell
$ echo $BASHPID ; ( echo $BASHPID;sleep 100)
20402
30776
$ pstree -p | grep 31276
├─sshd(727)─┬─sshd(31268)─┬─bash(31276)───bash(31326)───sleep(31327)
# { } 不会开启子Shell
$ echo $BASHPID ; { echo $BASHPID; }
31276
31276