Bash的基本特性之命令替换和命令行展开

命令替换

命令替换,就是把某个子命令替换为其执行结果的过程。命令替换符有两种 :

1
$(command) 或 `command`

在一些命令中如果出现命令替换符,Kernel 会首先执行子命令,然后在执行外部命令

1
2
3
4
5
[user1@study ~]$ echo "$(date +'%F %T') [ INFO ] log something"
2015-07-09 22:48:32 [ INFO ] log something
[user1@study ~]$ echo "`date +'%F %T'` [ INFO ] log something"
2015-07-09 22:48:48 [ INFO ] log something
[user1@study ~]$

这两种没有什么区别,但是从直观性上看,更建议使用 $(command),不容易使人对符号混淆

命令行展开

命令行展开会将 {} 花括号中的内容用类似于数学中的因式分解进行展开

1
2
3
[user1@study ~]$ echo aa{1,2,3}X{a,b}  
aa1Xa aa1Xb aa2Xa aa2Xb aa3Xa aa3Xb
[user1@study ~]$

备份一个文件时显得十分有用

1
2
3
4
5
6
[user1@study ~]$ ls
file
[user1@study ~]$ cp file{,.bak}
[user1@study ~]$ ls
file file.bak
[user1@study ~]$

还可以利用这个特性一次性创建多个文件

1
2
3
4
5
6
[user1@study ~]$ ls
file file.bak
[user1@study ~]$ touch file{1,2,3}.txt
[user1@study ~]$ ls
file file1.txt file2.txt file3.txt file.bak
[user1@study ~]$

{} 花括号中使用数字区间,默认的步进长度为 1,还可以手动指定

1
2
3
4
5
[user1@study ~]$ echo {1..20}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
[user1@study ~]$ echo {1..20..2}
1 3 5 7 9 11 13 15 17 19
[user1@study ~]$
有钱任性,请我吃包辣条
0%