bash shell的扩展,指shell在分析输入命令时的一种将命令展开的操作。
参考一下man bash的扩展页:
扩展(EXPANSION) 命令行的扩展是在拆分成词之后进行的。有七种类型的扩展: brace expansion(花括号扩展), tilde expan‐ sion(波浪线扩展), parameter and variable expansion(参数和变量扩展), command substi‐ tution(命令替换), arithmetic expansion(算术扩展), word splitting(词的拆分), 和 path‐ name expansion(路径扩展)
花括号扩展的模式是一个可选的 preamble(前导字符), 后面跟着一系列逗号分隔的字符串,包含在一对花括号中, 再后面是一个可选的 postscript(附言)。
例如, a{d,c,b}e 扩展为 `ade ace abe'。
mv file{1,2,3,4}.txt bk/.
cp mydata{,$bkdate}.log
echo file-{a..d}.txt
echo file.txt{,.bak}
echo delta.{txt,doc}
序列表达式的格式为:{x..y[..incr]}。其中x和y均为数字或单个英文字母,incr表示增量(必须是整数),..incr可以省略,如果省略则表示增量为1或-1。
用在for循环
for i in {1..9..3} ; do echo $i;done
大括号扩展可以嵌套。每个扩展字符串的结果是不排序的,依然按照从左到右的顺序依次扩展。
echo a{m,n/{1..3},o}x
如果扩展中的序列表达式中的数字是整数,并且有前导0时,Bash 会试图让每个生产的量都含有同样多的位数,如果位数不同就会在前面补0,示例如下:
[root:~ #] echo {05..100..5}
005 010 015 020 025 030 035 040 045 050 055 060 065 070 075 080 085 090 095 100
注意:
大括号扩展在其他所有扩展之前进行,在其他扩展中的特殊字符都被保留下来。为了防止被认为是大括号的一部分,“{”或者“,”可以用反斜杠转义。
ls [a-z].txt{,.bak}
find . -name '*.txt' -exec cp {}{,.bak} \;