诗和远方

bash shell 大括号扩展

Linux

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} \;


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Catalog
标签列表
最新
最热
常用网站
站点信息
  • 文章总数:2015
  • 页面总数:1
  • 分类总数:17
  • 标签总数:517
  • 评论总数:0
  • 浏览总数:556728
Archives
Copyright © 2017-2019 www.my889.com Some Rights Reserved.
推荐使用 Chrome 浏览器浏览本站
沪ICP备17052342号
Sitemap XML