shell脚本中 {} ; 用法

栏目: Linux 发布时间:2022-02-09

有时我们会在 shell 脚本中看到 “{} ;”,那么 “{} ;” 究竟是什么意思呢?

{} ; 实例

# 删除 7 天以前的日志
$ find ~/logs/fe -mtime 7 -exec rm {} \;

简单解释一下上面的 shell 脚本:

1、"find ~/logs/fe -mtime 7" 的意思是:在 ~/logs/fe 目录下查找最后修改日期超过 7 天的(日志)文件

2、-exec 后面是要对查找到的文件执行的命令(即 rm 删除操作)

3、"{}" 是占位符,"find ~/logs/fe -mtime 7" 查找到的文件会被填补到这个位置

4、";" 用于标识命令的结束,为什么要这么做呢?因为 find 语句后面可以跟多个 -exec,而 -exec 后面的命令(rm)又可以接收多个参数,所以每个 -exec 不知道要在哪里结束,所以需要这个一个标识。

你可能又要问,为什么要对";"进行转义呢?原因是";"在shell脚本中用于语句之间的分隔,而多个 -exec 并不是独立的语句,它们只是一条语句的一部分,所以使用“;”,也是为了与“;”区分开来。

{} ; 延伸

我们来测试一下,在 -exec 语句结尾不添加 ";" 会发生什么?

$ find ~/logs/fe -mtime 7 -exec rm {}
find: -exec: no terminating ";" or "+"

执行上述脚本报错了,错误信息为“find: -exec: no terminating ";" or "+"”。

"terminating" 是结束、终止的意思,字面意思很清晰,没有给 -exec 语句指定结束标记。

从上面的报错我们可以看出,还可以使用 “';'” 或 "+" 标记 -exec 的结束。

所以,可以用 “;”

$ find ~/logs/fe -mtime 7 -exec rm {} \;

也可以用 “';'”

$ find ~/logs/fe -mtime 7 -exec rm {} ';'

还可以用 “+”

$ find ~/logs/fe -mtime 7 -exec rm {} +

当然也可以用 “'+'”

$ find ~/logs/fe -mtime 7 -exec rm {} '+'

小结

“{} ;” 是什么意思呢?

1、“{}” 是占位符

2、“;” 是一个结束标识,还可以使用 “+” 代替

3、删除 7 天以前的日志文件可以用以下 4 种写法

$ find ~/logs/fe -mtime 7 -exec rm {} \;
$ find ~/logs/fe -mtime 7 -exec rm {} ';'
$ find ~/logs/fe -mtime 7 -exec rm {} +
$ find ~/logs/fe -mtime 7 -exec rm {} '+'

本文地址:https://www.tides.cn/p_linux-shell-terminating