被遗忘的 bash 特性-展开

2018/04/01 Shell

1、什么是命令行展开

先来看一个例子

wangenzhi@k8s-node2:~ $ mkdir -pv /home/wangenzhi/{A,B,C}
mkdir: 已创建目录 "/home/wangenzhi/A"
mkdir: 已创建目录 "/home/wangenzhi/B"
mkdir: 已创建目录 "/home/wangenzhi/C"

命令行展开示例1

通过上面示例其实我们可以看到正常情况下需要创建三次的步骤,一次就完成了。bash 其实是将 {} 中的内容先进行展开,而后进行操作。再看一个例子看看是否能够理解。

wangenzhi@k8s-node2:~ $ mkdir -pv {a,b}_{c,d}
mkdir: 已创建目录 "a_c"
mkdir: 已创建目录 "a_d"
mkdir: 已创建目录 "b_c"
mkdir: 已创建目录 "b_d"

剖析一下上面的执行过程:

1、 {a,b}_{c,d} 进行展开 2、展开后得到如下结果

a_c
a_d
b_c
b_d

3、执行 mkdir创建目录

cp、mv 命令使用展开

cp 命令不用废话大家都知道干嘛的,平时你要想备份一个文件,是不是下面这样,如果不是说明你对命令行展开已经非常熟悉并且经常使用。

wangenzhi@k8s-node2:~ $ cp message.log message.log.bak
wangenzhi@k8s-node2:~ $ ll
总用量 0
-rw-rw-r-- 1 wangenzhi wangenzhi 0 4月   1 22:24 message.log
-rw-rw-r-- 1 wangenzhi wangenzhi 0 4月   1 22:24 message.log.bak

掌握了命令行展开以后我们可以这样来一波操作,同样的例子

wangenzhi@k8s-node2:~ $ cp message.log{,.bak}
wangenzhi@k8s-node2:~ $ ll
总用量 0
-rw-rw-r-- 1 wangenzhi wangenzhi 0 4月   1 22:26 message.log
-rw-rw-r-- 1 wangenzhi wangenzhi 0 4月   1 22:26 message.log.bak

mv 命令使用命令行展开其实跟 cp 一样,直接看例子吧

wangenzhi@k8s-node2:~ $ ll
总用量 0
-rw-rw-r-- 1 wangenzhi wangenzhi 0 4月   1 22:26 message.log
wangenzhi@k8s-node2:~ $ mv message.log{,.bak}
wangenzhi@k8s-node2:~ $ ll
总用量 0
-rw-rw-r-- 1 wangenzhi wangenzhi 0 4月   1 22:26 message.log.bak

命令行展开示例2

通过命令行展开,在某些场景下确实可以提高我们的效率显得自己很专业。

Search

    Table of Contents