bash shell 大括号扩展

周海汉 /文

2010.6.10

bash shell的扩展,指shell在分析输入命令时的一种将命令展开的操作。 有7种扩展方式。参考一下man bash的扩展页:

大括号(花括号)扩展方式也有意思。

示例1:操作多个文件名有共同点的文件

zhouhh@zhh64:~/brace$ ls
bk
zhouhh@zhh64:~/brace$ touch file{source,target,info,readme}.txt
zhouhh@zhh64:~/brace$ ls
bk fileinfo.txt filereadme.txt filesource.txt filetarget.txt

zhouhh@zhh64:~/brace$ echo file{1,2,3,4}.txt
file1.txt file2.txt file3.txt file4.txt
zhouhh@zhh64:~/brace$ touch file{1,2,3,4}.txt
zhouhh@zhh64:~/brace$ ls
bk file1.txt file2.txt file3.txt file4.txt

示例2:一个命令将几个文件名有规律的文件转移到一个目录

zhouhh@zhh64:~/brace$ ls bk
zhouhh@zhh64:~/brace$ mv file{1,2,3,4}.txt bk/.
zhouhh@zhh64:~/brace$ ls bk
file1.txt file2.txt file3.txt file4.txt
zhouhh@zhh64:~/brace$

示例3:备份

zhouhh@zhh64:~/brace$ touch mydata.log
zhouhh@zhh64:~/brace$ vi back.sh
zhouhh@zhh64:~/brace$ chmod +x back.sh
zhouhh@zhh64:~/brace$ cat back.sh
set -x #调试模式
bkdate=`date +%F` #日期
cp mydata{,$bkdate}.log #将log备份为带日期格式
zhouhh@zhh64:~/brace$ ls
back.sh bk mydata.log
zhouhh@zhh64:~/brace$ ./back.sh
+++ date +%F
++ bkdate=2010-06-10
++ cp mydata.log mydata2010-06-10.log
zhouhh@zhh64:~/brace$ ls
back.sh bk mydata2010-06-10.log mydata.log

示例4 处理多个有规律文件名

zhouhh@zhh64:~/brace$ echo /var/log/messages.{1..3}
/var/log/messages.1 /var/log/messages.2 /var/log/messages.3

zhouhh@zhh64:~/brace$ echo file{a..d}{1..3}.txt
filea1.txt filea2.txt filea3.txt fileb1.txt fileb2.txt fileb3.txt filec1.txt filec2.txt filec3.txt filed1.txt filed2.txt filed3.txt

示例5 for循环

zhouhh@zhh64:~/brace$ for i in {1..9..3}
> do
> echo $i
> done
1
4
7

参考:

http://www.thegeekstuff.com/2010/06/bash-shell-brace-expansion/#more-4614

你可能感兴趣的:(F#,bash)