( CMD1 ; CMD2 ; … ) 和 { CMD1 ; CMD2 ; … ; } 都可以将多个命令组合在一起,批量执行

    $ man bash

    image.png

    ( list ) 会开启子 shell,并且 list 中变量赋值以及内部命令执行后,将不再影响后续的环境, 帮助查看:man bash,搜索(list) { list; } 不会开启子 shell,在当前 shell 中运行,会影响当前 shell 环境, 帮助查看:man bash,搜索 { list; }(注意有分号,退出{})

    范例:() 和 {}

    1. $ name=zhong ; ( echo $name;name=zzw;echo $name ) ; echo $name
    2. zhong
    3. zzw
    4. zhong
    5. $ name=zhong ; { echo $name;name=zzw;echo $name; } ; echo $name
    6. zhong
    7. zzw
    8. zzw
    9. $ umask
    10. 0022
    11. $ ( umask 066;touch f1.txt ) ; ls -l f1.txt
    12. -rw------- 1 root root 0 May 15 20:45 f1.txt
    13. $ umask
    14. 0022
    15. # ( ) 会开启子Shell
    16. $ echo $BASHPID ; ( echo $BASHPID;sleep 100)
    17. 20402
    18. 30776
    19. $ pstree -p | grep 31276
    20. ├─sshd(727)─┬─sshd(31268)─┬─bash(31276)───bash(31326)───sleep(31327)
    21. # { } 不会开启子Shell
    22. $ echo $BASHPID ; { echo $BASHPID; }
    23. 31276
    24. 31276