bash之花括号扩展(brace expansion )

  1. bash的全部扩展(expansion)以下:
    Brace Expansion(花括号扩展)
    Tilde Expansion(波浪号扩展)
    Parameter and Variable Expansion (参数和变量扩展)
    Command Substitution(命令置换)
    Arithmetic Expansion(算数扩展)
    Word Splitting(单词分割)
    Pathname Expansion(路径扩展)
    上面列举的顺序正是bash在扩展时的顺序
    bash之花括号扩展(brace expansion )
  2. 花括号展开的定义(Brace Expansion)
    花括号扩展也称大括号扩展,是可让bash生成任意字符串的一种扩展功能。它与“路径扩展”很是类似,惟一不一样的是生成的字符串能够是不存在的路径或者文件名
    在bash中,花括号扩展在诸多扩展中优先级最高,所以相似于echo {a,b}$PATH的语句在完成花括号扩展以后的结果应该为 a$PATH b$PATH,而对PATH环境变量的扩展要到后续的“参数和变量扩展”阶段才开始
  3. 花括号扩展的两种格式3.1 第一类格式为:preamble+{string1,string2,string3,...,stringN}+postcript左右的花括号是必须的,中间的字符串列表分别由逗号隔开,注意逗号先后不能有空格,若是string中有空格,则须要单引号或者双引号扩起来bash在实际扩展时,会将preamble和花括号中的全部字符串(按照从左到右的顺序)相连,最后分别加上postscript。此外,花括号中间至少有一个逗号,不然bash不会认为花括号扩展,例如:echo {moneny},想要输出money,须要改成echo{money,} 以下:[root@master01 ~]# echo {money}{money}[root@master01 ~]# echo {money,}money查看完整的例子(注意空格的处理)[root@master01 ~]# echo sp{el,il,al}lspell spill spall[root@master01 ~]# echo sp{el,il, al}lsp{el,il, al}l[root@master01 ~]# echo sp{el,il,' al'}lspell spill sp all[root@master01 ~]# echo sp{el,il," "al}lspell spill sp all[root@master01 ~]# echo sp{el,il,' 'al}lspell spill sp all[root@master01 ~]# echo sp{el,il," al"}lspell spill sp all3.2 第二类格式为: preamble+{<START>..<END>..[INCR]}+postscript其中<START>..<END>组合而成的表达式术语叫作序列表达式(sequence expansion),表示一个特定的范围。当<START>和<END>是数字,表明的是数字范围;当<START>和<END>是单个字母时,表明是字符范围(默认LC_ALL字符排列)。<START>和<END>必须同为数字或者字母,不然bash不认为是花括号扩展,而是原样输出。[root@master01 ~]# echo {1..12}1 2 3 4 5 6 7 8 9 10 11 12[root@master01 ~]# echo {3..-2}3 2 1 0 -1 -2[root@master01 ~]# echo {a..g}a b c d e f g[root@master01 ~]# echo {h..a}h g f e d c b a其中的<INCR>是可选的,表明的是区间范围的递增数,它必须是数字。例如:[root@master01 ~]# echo {0..10..2}0 2 4 6 8 10从0开始,每递增2个数字就取出相应的数字。若是不指定<INCR>,那么默认是1或者是-1,具体是1或者-1,要看前面区间范围是递增仍是递减的,好比上面例子的{a..g}中默认是1,{h..a}默认为-1另外,当<START>和<END>是数字时,咱们能够经过数字前面加0来输出结果长度保持一致,[root@master01 ~]# echo {1..10}1 2 3 4 5 6 7 8 9 10[root@master01 ~]# echo {01..10}01 02 03 04 05 06 07 08 09 10[root@master01 ~]# echo {001..10}001 002 003 004 005 006 007 008 009 010这样格式长度同样,会显得很美观
相关文章
相关标签/搜索