Shell {} 扩展

语法

preamble{...}postscript

{...}:按逗号分开的,或者序列表达式。

preamble 放在每个前面。

postscript 放在每个后面。

{} 扩展可以嵌套。

输出结果不排序。从左到右保留原先顺序。

$ echo a{d,c,b}e
ade ace abe

序列

{x..y[..incr]}

xy 必须为同一种类型。

数字

xy,生成序列。incr 为步长。

xy 为数字:生成 xy 之间所有的数字。

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10

$ echo {1..10..2}
1 3 5 7 9

$ echo {10..1}
10 9 8 7 6 5 4 3 2 1

如果 xy0 开头,生成的一样的长度。

$ echo {00000..10}
00000 00001 00002 00003 00004 00005 00006 00007 00008 00009 00010

字符

xy 为字符:生成 xy 之间所有的字符。

$ 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..1}
{a..z..1}

使用示例:

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}