shell脚本中 {} ; 用法
有时我们会在 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