# shell中组合命令的方法

- 4

- A+

所属分类：Shell 编程

在shell中，有两种组合命令的方法，在介绍这两种方法之前，我们先来看一个小示例。

目前有两个目录，这两个目录分别为/test1和/test2，目录中分别存在如下文件。

此刻，如果我们想要统计这两个目录中一共有多少个文件，该怎样编写shell呢，编写如下的shell命令，能够达到目的吗？

上述命令是无法统计出两个目录中的文件数量的，因为执行结果如下。

从上述执行结果可以看出，前两条命令并没有一起执行，而是第一条命令执行完毕后，再把后面的命令当做一个整体执行了，那么如果我们想要让前两条命令当做一个整体执行，该怎样做呢？

没错，这时候就要用到我们之前说的两种方法，两种方法的示例如下。

上图中，我们分别使用小括号"( )" 与 大括号"{ }"将前两个命令组合在了一起。两种方法都能达到我们的目的，但是，这两种方法是有所不同的，先说说第一种，当使用"小括号"将两条命令括起以后，这两条命令相当于在当前shell的子shell中执行，也就是说，这两条命令并不是在当前进程中运行的，而是在当前进程的子进程中运行的，而使用"大括号"时则不同，被大括号括起的命令是在当前进程中执行的。那么，我们怎样证明上述理论呢，我们可以做一个小实验，如下图。

当我们使用小括号将命令聚合以后，因为是在子进程中执行，所以即使exit命令生效，也是退出子进程，而不是退出当前shell进程，但是如果使用大括号将命令组合，则表示在当前shell进程中运行命令，所以，当exit命令生效时，则会退出当前shell进程。

好了，这就是使用"大括号"与使用"小括号"的不同之处，其实，在使用大括号时，还需要注意一些额外的注意点，细心如你一定已经发现了，上述所有使用"大括号"的示例中，大括号内的所有命令都用空格隔开了，而且大括号内的每个命令都必须以分号";"结尾，即使是大括号内的最后一个命令，也需要以分号结尾，而且需要用空格与大括号隔开，这就是使用这种方法的注意点，其实，这种用大括号聚合命令的方法是使用了函数中"代码块"的语法，在函数中，一个函数的代码块就会用大括号括起，表示是一个函数的整体，此处我们也可以这样理解，我们将多个命令用大括号括起，表示他们是一个代码块，是一个整体，我们可以把这种没有函数名只有函数体的代码块理解为匿名函数，当然，如果你还不了解shell的函数，没有关系，只需要记住这种用法即可。

我的微信公众号
关注"实用运维笔记"微信公众号，当博客中有新文章时，可第一时间得知哦~
赞 29
赏
分享

- Shell（bash）

- 版权声明：本站原创文章，于2017年1月19日22:09:08，由 朱双印 发表，共 984 字。
- 如需转载，请在文章头部注明出处：shell中组合命令的方法 | 朱双印博客

shell中常用的变量处理、字符串操作（之三）
shell中常用的变量处理、字符串操作（之二）
shell中常用的变量处理、字符串操作（之一）
bash中 [ ] 与 [[ ]] 的区别

### 发表评论取消回复

欢迎 pangzi 再次光临！
修改信息

正在提交, 请稍候...
#

昵称*

邮箱*

网址

有回复时邮件通知我

## 目前评论：4 其中：访客 3 博主 1

2. 临江仙 4
   回复 2020年2月6日 上午10:54 沙发

   第一次知道这个（），{}

4. echo 6
   回复 2017年6月3日 下午8:47 板凳

   先评论 再笔记

   - 朱双印 Admin
     回复 2017年6月3日 下午9:09 1层

     @echo 加油加油

6. w 0
   回复 2017年4月12日 下午10:35 地板

   搜的斯内

- 文章目录

×
×
拖拽到此处
图片将完成下载