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