如何在Bash shell中使用花括号扩展{..}

花括号扩展(brace expansion) {..} 是 linux 中使用率很高的一个 shell 功能。 你可以使用它打印数字或字母序列,将两个整数或字母使用花括号中的两个点分隔开,然后会看到神奇的结果。
我们举个最简单的例子,看如下代码:
echo {1..10}上述一行 echo 代码的输出将会是什么呢? 如下:
1 2 3 4 5 6 7 8 9 10输出结果,会打印在同一行中,中间使用空格隔开。
为了让大家可以更好的理解它的功能,我们接下来列举几个其他例子。
一些例子
假如我们想要得到一个从 7 到 1 的数字序列:
$ echo {7..1}7 6 5 4 3 2 1可以添加前缀 0:
$ echo {01..10}01 02 03 04 05 06 07 08 09 10可以使用 {x.. y.. z} 形式的花括号来扩展生成从 x 到 y 的值,递增(步长)为 z。 比如我们想要打印 15 以内的偶数序列,如下:
$ echo {0..15..2}0 2 4 6 8 10 12 14或者奇数序列:
$ echo {1..15..2}1 3 5 7 9 11 13 15步长可以指定为任何数值:
$ echo {100..1000..99}100 199 298 397 496 595 694 793 892 991也可以采用负数:
$ echo {3..-4}3 2 1 0 -1 -2 -3 -4注意:花括号中的点之间 不能有空格 ,否则,扩展将不起作用。
使用字母序列
我们上面的例子,介绍的是使用数字序列。 但是也可以使用它生成字母序列。 看下面的例子:
$ echo {a..h}a b c d e f g h也可以将顺序反过来:
$ echo {h..a}h g f e d c b a或者指定步长:
$ echo {h..a..2}h f d b或者使用小写字母:
$ echo {a..f}a b c d e f实际应用
上面我们介绍了花括号扩展的具体用法,下面来介绍一些关于它的实际应用。
创建一系列文件
我们可以利用花括号扩展来创建一系列具有相同文件名规则的文件,看下面的例子:
$ touch file_{1..10}.txt$ lsfile_10.txt file_2.txt file_4.txt file_6.txt file_8.txtfile_1.txt file_3.txt file_5.txt file_7.txt file_9.txt创建备份文件
当我们在编辑配置文件时,一般建议先对其进行备份,按照大多数人的习惯,是在原始文件名中添加 .bak 扩展名,这表示它是对原文件的一个备份。
比如:
cp -p long_filename.txt long_filename.txt.bak现在我们来使用花括号扩展来完成这个工作,如下代码:
cp -p long_filename.txt{,.bak}是的,这里的 {,text} 不是上面的那种 {x.. y} 的模式,但是你需要知道有这样一个用法的存在。
$ cp -p long_filename.txt{,.bak}$ lslong_filename.txt long_filename.txt.bak上述 cp 命令的 -p 选项表示需要保留原文件的属性,比如所有权、时间戳等。
使用多个花括号
可以使用多个花括号来创建具有相似名称和不同扩展名的文件,看下面的例子:
$ touch {a,b,c}.{hpp,cpp}$ lsa.cpp a.hpp b.cpp b.hpp c.cpp c.hpp在路径中使用或括号扩展
假设有两个路径,其目录结构是类似的,只有很少的一部分不一样(比如中间某个文件夹名称不同),这个时候,花括号扩展会非常有用。 看下面代码:
mv project/{new,old}/dir/file其相当于:
mv project/new/dir/file project/old/dir/file并非所有内容都可扩展
这是不言而喻的。 如果你希望创建一个序列,给出的条件应该是可以创建成序列的东西。 如果你使用的是一个很奇怪的组合,将不能被扩展。 比如:
$ echo {1..z}{1..z}另外,也不能使用小数:
$ echo {1..5..0.5}{1..5..0.5}一些奇怪的组合,也会生成奇怪的结果:
$ echo {a..f}a ` _ ^ ] [ z y x w v u t s r q p o n m l k j i h g f当你刚开始接触花括号扩展时,会觉得它很麻烦。 但是,手动打字会更耗费时间。 一旦你熟悉了它,那你的 linux 技能会更上一个台阶。

两线制电流变送器的优点
华为奋起,2016年大陆手机龙头可望易主
沁恒股份USB总线接口芯片:CH374概述
【节能学院】高校学生公寓智慧用电系统的研究与应用
光纤⽹络可以实现哪些新的技术
如何在Bash shell中使用花括号扩展{..}
4端口USB 3.0集线器控制器VL813概述
头歌计算机组成原理存储系统设计实验报告(字库存储芯片,MIPS寄存器文件设计)
美国ALTI UAS新推搜索和救援无人机
什么是MEMS芯片,什么是MEMS传感器
区块链如何使消费者能够控制他们的数据
函数指针和回调函数的使用方法
轮胎逆向设计解决方案
周志华:中国人工智能活跃度仅次于美国 人工智能研究要靠人的聪明
三星S10新机刚发布 曝光了检测和评分
耐压测试仪的操作方法和测试步骤
基于AVR32的隧道环境监测系统设计方案解析
基于CY7C68013与GPIF模式的USB2.0数据传输系统的设计
三星成为Linux基金会白金会员 获董事席位
TDA7056B各引脚功能及电压