在 Bash shell 中使用花括號擴展 {..}
?你可以使用它打印數(shù)字或字母序列,將兩個整數(shù)或字母使用花括號中的兩個點分隔開,然后會看到神奇的結(jié)果。
我們舉個最簡單的例子,看如下代碼:
上述一行 echo 代碼的輸出將會是什么呢?如下:
輸出結(jié)果,會打印在同一行中,中間使用空格隔開。
為了讓大家可以更好的理解它的功能,我們接下來列舉幾個其他例子。
一些例子
假如我們想要得到一個從 7 到 1 的數(shù)字序列:?
可以添加前綴 0:?
可以使用 {x..y..z} 形式的花括號來擴展生成從 x 到 y 的值,遞增(步長)為 z。比如我們想要打印 15 以內(nèi)的偶數(shù)序列,如下:?
或者奇數(shù)序列:
步長可以指定為任何數(shù)值:?
也可以采用負數(shù):?
注意:花括號中的點之間不能有空格,否則,擴展將不起作用。
使用字母序列
我們上面的例子,介紹的是使用數(shù)字序列。但是也可以使用它生成字母序列??聪旅娴睦樱?
也可以將順序反過來:?
或者指定步長:?
或者使用小寫字母:?
實際應(yīng)用
上面我們介紹了花括號擴展的具體用法,下面來介紹一些關(guān)于它的實際應(yīng)用。
創(chuàng)建一系列文件
我們可以利用花括號擴展來創(chuàng)建一系列具有相同文件名規(guī)則的文件,看下面的例子:?
創(chuàng)建備份文件
當我們在編輯配置文件時,一般建議先對其進行備份,按照大多數(shù)人的習(xí)慣,是在原始文件名中添加 .bak 擴展名,這表示它是對原文件的一個備份。
比如:
現(xiàn)在我們來使用花括號擴展來完成這個工作,如下代碼:
是的,這里的 {,text} 不是上面的那種 {X..Y} 的模式,但是你需要知道有這樣一個用法的存在。
上述 cp 命令的 -p 選項表示需要保留原文件的屬性,比如所有權(quán)、時間戳等。
使用多個花括號
可以使用多個花括號來創(chuàng)建具有相似名稱和不同擴展名的文件,看下面的例子:?
在路徑中使用或括號擴展
假設(shè)有兩個路徑,其目錄結(jié)構(gòu)是類似的,只有很少的一部分不一樣(比如中間某個文件夾名稱不同),這個時候,花括號擴展會非常有用??聪旅娲a:
其相當于:
并非所有內(nèi)容都可擴展
這是不言而喻的。如果你希望創(chuàng)建一個序列,給出的條件應(yīng)該是可以創(chuàng)建成序列的東西。如果你使用的是一個很奇怪的組合,將不能被擴展。比如:?
另外,也不能使用小數(shù):?
一些奇怪的組合,也會生成奇怪的結(jié)果:?
當你剛開始接觸花括號擴展時,會覺得它很麻煩。但是,手動打字會更耗費時間。一旦你熟悉了它,那你的 Linux 技能會更上一個臺階。