ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

bash之花括号扩展(brace expansion )

2020-01-30 16:55:10  阅读:350  来源: 互联网

标签:sp .. brace master01 扩展 expansion echo 之花 root


  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}l
    spell spill spall
    [root@master01 ~]# echo sp{el,il, al}l
    sp{el,il, al}l
    [root@master01 ~]# echo sp{el,il,' al'}l
    spell spill sp all
    [root@master01 ~]# echo sp{el,il," "al}l
    spell spill sp all
    [root@master01 ~]# echo sp{el,il,' 'al}l
    spell spill sp all
    [root@master01 ~]# echo sp{el,il," al"}l
    spell spill sp all
    3.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
    这样格式长度一样,会显得很美观

标签:sp,..,brace,master01,扩展,expansion,echo,之花,root
来源: https://blog.51cto.com/focuslinux/2468627

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有