經(jīng)常會在博客或者論壇看到類似下面的命令 大括號擴(kuò)展 Brace expansion { } shell 作用
cp /etc/httpd/httpd.{,.bakup}
或者是
那么,在uinx / linux shell命令中是什么意思?起什么作用呢?
{ } 并沒有什么實(shí)際的含義,但是卻可以作為Brace expansion(大括號擴(kuò)展或叫做花括號擴(kuò)展)而經(jīng)常用于產(chǎn)生各種組個。以下是翻譯自 GNU/BASH man page 的內(nèi)容:
Brace expansion(大括號擴(kuò)展或叫做花括號擴(kuò)展) 是用來隨機(jī)產(chǎn)生字符串組合的機(jī)制。這種機(jī)制類似于文件的擴(kuò)展名,但是并不需要存在響應(yīng)的文件。Brace expansion(大括號擴(kuò)展或叫做花括號擴(kuò)展)模式是一可選的preamble(前導(dǎo)字符),后面跟著一系列逗號分隔的字符串,包含在一對花括號中, 再后面是一個可選的postscript(打印編程語言)。preamble(前導(dǎo)字符)被添加到花括號中的每個字符串前面,postscript(打印編程語言)被附加到每個結(jié)果字符串之后, 從左到右進(jìn)行擴(kuò)展。 花括號擴(kuò)展可以嵌套。擴(kuò)展字符串的結(jié)果沒有排序;而是保留了從左到右的順序。
1.如,在終端中輸入下面命令:
輸出如下:
foo1.txt foo2.txt foo3.txt
2.也可以使用下面附加的實(shí)例,去在命令中“創(chuàng)建”一個參數(shù),以節(jié)省輸入的時間,提高工作效率:
echo file.txt{,.bak}
echo file-{a..d}.txt
echo mkdir -p /apache-jail/{usr,bin,lib64,dev}
echo cp httpd.conf{,.backup}
echo mv delta.{txt,doc}
3.可以使用Brace expansion(大括號擴(kuò)展或叫做花括號擴(kuò)展)來復(fù)制,重命名文件,或者是備份文件,還可以是創(chuàng)建目錄等。在下面這個習(xí)慣性使用的的例子中,將 file1.txt 備份為 file2.txt.bak ,輸入:
cp -v file1.txt file1.txt.bak
如果使用Brace expansion,節(jié)省時間,則輸入:
輸出如下:
file1.txt -> file1.txt.bak
更多大括號擴(kuò)展實(shí)例如下:
4. 如果我們執(zhí)行:
$ cp /etc/apt/sources.list /etc/apt/sources.list.bak
這兩個 /etc/apt/sources 部分相同,為了少輸入兩次/etc/apt/sources ,大括號擴(kuò)展參數(shù)。還有平時重命名,備份文件,創(chuàng)建鏈接時候,都可以使用大括號擴(kuò)展參數(shù)的方法提高效率。
大括號擴(kuò)展,即大括號包圍的,用逗號隔開的參數(shù)會擴(kuò)展為獨(dú)立的多個參數(shù)。
$ cp /etc/apt/sources.{list,list.bak}
Shell 在解釋時會自動將后面的參數(shù)擴(kuò)展成兩個,就變成了和上面一樣的完整命令。
當(dāng)然,還可更簡單,將 list 也考慮進(jìn)去,在逗號前什么都不寫,如下:
$ cp /etc/apt/sources.list{,.bak}
這樣逗號前面沒東西,那么參數(shù)就保持原來的不變,逗號后面的照樣擴(kuò)展。
您可能感興趣的文章:- Linux移動文件與目錄-mv命令的10個實(shí)用例子
- 一個簡單的linux命令 mv
- 詳解vmvare下安裝linux RedHat圖解(超詳細(xì)篇)
- linux指令man page之rm,mv詳解
- Linux中mv命令的高級用法示例