Linux——花括号{}扩展(brace expansion)以及需要注意的问题

花括号扩展可以让我们按照花括号里的模式创建一连串字符串。
例如:

echo Love_{a,b,c}_Forever

可以看到打印了:

Love_a_Forever Love_b_Forever Love_c_Forever

由于默认模式下,不能忽略空格,这里使用_代替空格。
这里的开头部分Love_被称为前导字符(preamble),结尾部分_Forever被称为附言(postscript)

我们还可以按顺序输出设定范围内的字母或者数字,例如:

echo {1..10}

终端里将打印出:

1 2 3 4 5 6 7 8 9 10

打印字母的时候有点特殊问题,我们先来看下面按序输出大写的A到Z的字母:

echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

再来看全是小写字母a到z:

echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

目前为止都很正常,但是我们输入:

echo {A..z}

这时候打印出的是:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z

可以看到先输出全部大写字母,然后出现一堆符号,然后再全部小写字母。很奇怪对吧,等会再解释为什么这样,我们再来看输入:

echo {a..Z}

这时候返回的是:

a ` _ ^ ]  [ Z

更加奇怪了是不是,这是为什么呢?
我们来看一个东西,ASCII码表:
ASCII码表

这时候我们看65号的A到122号的z之间,除了大小写字母之外,是不是出现了那堆奇怪的符号。这是因为花括号扩展的顺序是按照ASCII码表的顺序输出的。
这时候我们也就可以理解echo {a..Z}为什么会返回那段字符串了,因为在ASCII码表中其实是倒序的。

不过经过测试可以发现,由于其他符号有已经被赋予特殊含义,就只有大小写字母之间会出现这个问题。需要在使用中注意哦!

花括号扩展支持嵌套,例如:

echo c{a{1,4},b{2,3}}d
ca1d ca4d cb2d cb3d

花括号扩展普遍应用于创建一系列文件或者目录,这时候就可能需要按照时间来命名,手动输入一个个输入太麻烦了,这时候也可以使用花括号扩展,如下:

mkdir {2018..2021}-{01..12}
2018-1 2018-2 2018-3 2018-4 2018-5 2018-6 2018-7 2018-8 2018-9 2018-10 2018-11 2018-12 2019-1 2019-2 2019-3 2019-4 2019-5 2019-6 2019-7 2019-8 2019-9 2019-10 2019-11 2019-12 2020-1 2020-2 2020-3 2020-4 2020-5 2020-6 2020-7 2020-8 2020-9 2020-10 2020-11 2020-12 2021-1 2021-2 2021-3 2021-4 2021-5 2021-6 2021-7 2021-8 2021-9 2021-10 2021-11 2021-12

可以看到01自动变成1,这样不能让月份都为两位,不好看。可以这样:

mkdir {2018..2021}-0{1..9} {2018..2021}-{10..12}
2018-01 2018-02 2018-03 2018-04 2018-05 2018-06 2018-07 2018-08 2018-09 2018-10 2018-11 2018-12 2019-01 2019-02 2019-03 2019-04 2019-05 2019-06 2019-07 2019-08 2019-09
2019-10 2019-11 2019-12 2020-01 2020-02 2020-03 2020-04 2020-05 2020-06 2020-07 2020-08 2020-09 2020-10 2020-11 2020-12 2021-01 2021-02 2021-03 2021-04 2021-05 2021-06 2021-07 2021-08 2021-09 2021-10 2021-11 2021-12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值