花括號擴展(Brace expansion) {..} 是 Linux 中使用率很高的一個 shell 功能。 你可以使用它打印數字或字母序列,將兩個整數或字母使用花括號中的兩個點分隔開,然后會看到神奇的結果。
我們舉個最簡單的例子,看如下代碼:
echo {1..10}
上述一行 echo 代碼的輸出將會是什么呢? 如下:
1 2 3 4 5 6 7 8 9 10
輸出結果,會打印在同一行中,中間使用空格隔開。
為了讓大家可以更好的理解它的功能,我們接下來列舉幾個其他例子。
一些例子
假如我們想要得到一個從 7 到 1 的數字序列:
$ echo {7..1}
7 6 5 4 3 2 1
可以添加前綴 0:
$ echo {01..10}
01 02 03 04 05 06 07 08 09 10
可以使用 {x.. y.. z} 形式的花括號來擴展生成從 x 到 y 的值,遞增(步長)為 z。 比如我們想要打印 15 以內的偶數序列,如下:
$ echo {0..15..2}
0 2 4 6 8 10 12 14
或者奇數序列:
$ echo {1..15..2}
1 3 5 7 9 11 13 15
步長可以指定為任何數值:
$ echo {100..1000..99}
100 199 298 397 496 595 694 793 892 991
也可以采用負數:
$ echo {3..-4}
3 2 1 0 -1 -2 -3 -4
注意:花括號中的點之間 不能有空格 ,否則,擴展將不起作用。
使用字母序列
我們上面的例子,介紹的是使用數字序列。 但是也可以使用它生成字母序列。 看下面的例子:
$ echo {A..H}
A B C D E F G H
也可以將順序反過來:
$ echo {H..A}
H G F E D C B A
或者指定步長:
$ echo {H..A..2}
H F D B
或者使用小寫字母:
$ echo {a..f}
a b c d e f
實際應用
上面我們介紹了花括號擴展的具體用法,下面來介紹一些關于它的實際應用。
創建一系列文件
我們可以利用花括號擴展來創建一系列具有相同文件名規則的文件,看下面的例子:
$ touch file_{1..10}.txt
$ ls
file_10.txt file_2.txt file_4.txt file_6.txt file_8.txt
file_1.txt file_3.txt file_5.txt file_7.txt file_9.txt
創建備份文件
當我們在編輯配置文件時,一般建議先對其進行備份,按照大多數人的習慣,是在原始文件名中添加 .bak 擴展名,這表示它是對原文件的一個備份。
比如:
cp -p long_filename.txt long_filename.txt.bak
現在我們來使用花括號擴展來完成這個工作,如下代碼:
cp -p long_filename.txt{,.bak}
是的,這里的 {,text} 不是上面的那種 {X.. Y} 的模式,但是你需要知道有這樣一個用法的存在。
$ cp -p long_filename.txt{,.bak}
$ ls
long_filename.txt long_filename.txt.bak
上述 cp 命令的 -p 選項表示需要保留原文件的屬性,比如所有權、時間戳等。
使用多個花括號
可以使用多個花括號來創建具有相似名稱和不同擴展名的文件,看下面的例子:
$ touch {a,b,c}.{hpp,cpp}
$ ls
a.cpp a.hpp b.cpp b.hpp c.cpp c.hpp
在路徑中使用或括號擴展
假設有兩個路徑,其目錄結構是類似的,只有很少的一部分不一樣(比如中間某個文件夾名稱不同),這個時候,花括號擴展會非常有用。 看下面代碼:
mv project/{new,old}/dir/file
其相當于:
mv project/new/dir/file project/old/dir/file
并非所有內容都可擴展
這是不言而喻的。 如果你希望創建一個序列,給出的條件應該是可以創建成序列的東西。 如果你使用的是一個很奇怪的組合,將不能被擴展。 比如:
$ echo {1..Z}
{1..Z}
另外,也不能使用小數:
$ echo {1..5..0.5}
{1..5..0.5}
一些奇怪的組合,也會生成奇怪的結果:
$ echo {a..F}
a ` _ ^ ] [ Z Y X W V U T S R Q P O N M L K J I H G F
當你剛開始接觸花括號擴展時,會覺得它很麻煩。 但是,手動打字會更耗費時間。 一旦你熟悉了它,那你的 Linux 技能會更上一個臺階。
-
Linux
+關注
關注
87文章
11314瀏覽量
209784 -
代碼
+關注
關注
30文章
4797瀏覽量
68711 -
Shell
+關注
關注
1文章
366瀏覽量
23410
發布評論請先 登錄
相關推薦
評論