编写shell脚本时,有时需要生成数字或字符串序列。此类序列数据的常见用途是循环迭代。虽然可以使用像seq这样的专门工具来生成数字序列,但bash本身提供了大括号扩展,实际上没有必要向bash脚本添加这样的外部依赖项。在本教程中,让我们了解如何使用大括号扩展在shell脚本中生成数据序列以及大括号扩展的一些有用示例。{}大括号说明Bash的内置范围函数是通过所谓的{}大括号扩展实现的。简而言之,大括号扩展允许从提供的字符串和数字数据生成字符串序列。大括号扩展的语法如下。{,,...,}{..}{....}{...}{...}{...}示例1:列出字符字符串序列大括号扩展的第一个用例是一个简单的字符串列表,它是花括号内以逗号分隔的字符串列表。这里只是列出预定义的字符串数据。使用下面的for循环,列出包含在大括号中的字符串,如下所示。[root@localhost~]#forfruitin{apple,orange,lemon};doecho$fruit;doneappleorangelemon下面的例子是同时创建多个子目录:[root@localhost~]#mkdir-p/tmp/users/{丹、约翰、亚历克斯、迈克尔、艾玛}[root@localhost~]#ls-l/tmp/users/total0drwxr-xr-x2rootroot6Aug616:23alexdrwxr-xr-x2rootroot6Aug616:23dandrwxr-xr-x2rootroot6Aug616:23emmadrwxr-xr-x2rootwxrjoug6Aug616:23emmadrwxr-xr-x2rootwxrjoughn1下面是创建多个空文件:[root@localhost~]#touch/tmp/file{1,2,3,4}.log[root@localhost~]#ll/tmp/total0-rw-r--r--1rootroot0Aug616:24file1.log-rw-r--r--1rootroot0Aug616:24file2.log-rw-r--r--1rootroot0Aug616:24file3.log-rw-r--r--1rootroot0Aug616:24file4。log示例2:定义数字范围大括号扩展最常见的用例是为循环迭代定义数字范围。您可以使用以下表达式,在其中指定范围的开始/结束以及可选的增量值。{..}{....}定义10到20之间的整数序列:[root@localhost~]#echo{10..20}1011121314151617181920可以在循环中使用:[root@localhost~]#fornumin{10..20};doecho$num;done1011121314151617181920如果你想生成一个介于0和20之间的数字序列2的增量:[root@localhost~]#echo{0..20..2}02468101214161820也可以生成一系列递减的数字:[root@localhost~]#echo{20..10}2019181716151413121110[root@localhost~]#echo{20..10..-2}201816141210您还可以用前导零填充数字,以防您需要使用相同数量的数字。例如:[root@localhost~]#fornumin{00..20..2};doecho$num;done0002040608101214161820示例3:生成字母序列生成字母序列:[root@localhost~]#catbrace.sh#!/bin/bashforchar1in{A..B};doforchar2in{A..B};doecho"${char1}${char2}"doneone示例4:生成前缀和后缀使用此函数的字符串序列可以轻松生成按顺序编号的文件名列表:[root@localhost~]#forfileinimg_{00..05}.jpg;doecho$file;doneimg_00.jpgimg_01.jpgimg_02.jpgimg_03.jpgimg_04。jpgimg_05.jpg示例5:多个{}花括号的组合最后,可以组合多个花括号扩展,在这种情况下将生成所有可能的组合。forchar1in{A..Z};doforchar2in{A..Z};doecho"${char1}${char2}"doneone通过组合两个大括号扩展,下面的单循环可以产生与上面相同的输出。forstrin{A..Z}{A..Z};doecho$strdonesummarize{}允许您在单个命令行中轻松生成任意字符串序列。大括号扩展不仅对shell脚本很有用,而且在命令行环境中也很有用。