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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章