(CMD1;CMD2;...)和{CMD1;CMD2;...;}都可以将多个命令组合到一起,批量执行
( list ) 会开启子shell,并且list中变量赋值以及内部命令执行后,将不再影响后续的环境
{ list; } 不会开启子shell,在当前shell中运行,会影响当前shell环境
例:
[root@CentOS7 data]# echo $BASHPID;name=mage;echo $name;(echo $BASHPID;name=wang;echo $name);echo $BASHPID;echo $name 1491 mage 2199 #()会开启子shell,前后可以不用空格,()内最后一个命令可以不需要加; wang 1491 mage [root@CentOS7 data]# echo $BASHPID;name=mage;echo $name;{ echo $BASHPID;name=wang;echo $name; };echo $BASHPID;echo $name 1491 mage 1491 #{ }不会开启子shell,前后需要空格,所有命令后需要加; wang 1491 wang [root@CentOS7 data]# umask;(umask 066;touch f1.txt);ll f1.txt;umask 0022 -rw------- 1 root root 0 Jan 8 13:38 f1.txt 0022 [root@CentOS7 ~]# (cd /data;pwd;ls);pwd /data a.txt f1.txt /root [root@CentOS7 ~]# { cd /data;pwd;ls; };pwd /data a.txt f1.txt /data [root@CentOS7 data]#