复合命令是Shell编程语言的一种结构,用reserved word和control operator对多个命令进行组合。Bash提供三种复合命令结构:条件、循环和命令组。
复合命令在Bash里被作为一个执行单元。简单解释一下这里所说的“执行单元”的含义。例如在交互式shell里编写until … do… done的循环结构时,在没有输入保留字done之前,无论输入了多少个换行符,Bash都不会执行已经输入的命令。直至done输入后敲回车,Bash才会从until开始启动执行。
但要注意的时,虽然复合命令是一个执行单元,但组成复合结构的各个命令都在自己的独立的subshell里执行,有自己的PID.
“执行单元”还有另一层用作:关联的redirection会应用到组成复合结构的各个命令上。
$ if ls -al /proc/self/fd; then ls -al /proc/self/fd; fi >foo <bar
$ cat foo
total 0
dr-x------ 2 felix felix 0 May 31 07:15