0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在Bash shell中使用花括號(hào)擴(kuò)展{..}

CHANBAEK ? 來(lái)源:TIAP ? 作者:劉光錄 ? 2023-01-17 17:37 ? 次閱讀

花括號(hào)擴(kuò)展(Brace expansion) {..} 是 Linux 中使用率很高的一個(gè) shell 功能。 你可以使用它打印數(shù)字或字母序列,將兩個(gè)整數(shù)或字母使用花括號(hào)中的兩個(gè)點(diǎn)分隔開(kāi),然后會(huì)看到神奇的結(jié)果。

我們舉個(gè)最簡(jiǎn)單的例子,看如下代碼:

echo {1..10}

上述一行 echo 代碼的輸出將會(huì)是什么呢? 如下:

1 2 3 4 5 6 7 8 9 10

輸出結(jié)果,會(huì)打印在同一行中,中間使用空格隔開(kāi)。

為了讓大家可以更好的理解它的功能,我們接下來(lái)列舉幾個(gè)其他例子。

一些例子

假如我們想要得到一個(gè)從 7 到 1 的數(shù)字序列:

$ 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} 形式的花括號(hào)來(lái)擴(kuò)展生成從 x 到 y 的值,遞增(步長(zhǎng))為 z。 比如我們想要打印 15 以內(nèi)的偶數(shù)序列,如下:

$ echo {0..15..2}
0 2 4 6 8 10 12 14

或者奇數(shù)序列:

$ echo {1..15..2}
1 3 5 7 9 11 13 15

步長(zhǎng)可以指定為任何數(shù)值:

$ echo {100..1000..99}
100 199 298 397 496 595 694 793 892 991

也可以采用負(fù)數(shù):

$ echo {3..-4}
3 2 1 0 -1 -2 -3 -4

注意:花括號(hào)中的點(diǎn)之間 不能有空格 ,否則,擴(kuò)展將不起作用。

使用字母序列

我們上面的例子,介紹的是使用數(shù)字序列。 但是也可以使用它生成字母序列。 看下面的例子:

$ echo {A..H}
A B C D E F G H

也可以將順序反過(guò)來(lái):

$ echo {H..A}
H G F E D C B A

或者指定步長(zhǎng):

$ echo {H..A..2}
H F D B

或者使用小寫字母:

$ echo {a..f}
a b c d e f

實(shí)際應(yīng)用

上面我們介紹了花括號(hào)擴(kuò)展的具體用法,下面來(lái)介紹一些關(guān)于它的實(shí)際應(yīng)用。

創(chuàng)建一系列文件

我們可以利用花括號(hào)擴(kuò)展來(lái)創(chuàng)建一系列具有相同文件名規(guī)則的文件,看下面的例子:

$ 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

創(chuàng)建備份文件

當(dāng)我們?cè)诰庉嬇渲梦募r(shí),一般建議先對(duì)其進(jìn)行備份,按照大多數(shù)人的習(xí)慣,是在原始文件名中添加 .bak 擴(kuò)展名,這表示它是對(duì)原文件的一個(gè)備份。

比如:

cp -p long_filename.txt long_filename.txt.bak

現(xiàn)在我們來(lái)使用花括號(hào)擴(kuò)展來(lái)完成這個(gè)工作,如下代碼:

cp -p long_filename.txt{,.bak}

是的,這里的 {,text} 不是上面的那種 {X.. Y} 的模式,但是你需要知道有這樣一個(gè)用法的存在。

$ cp -p long_filename.txt{,.bak}
$ ls
long_filename.txt long_filename.txt.bak

上述 cp 命令的 -p 選項(xiàng)表示需要保留原文件的屬性,比如所有權(quán)、時(shí)間戳等。

使用多個(gè)花括號(hào)

可以使用多個(gè)花括號(hào)來(lái)創(chuàng)建具有相似名稱和不同擴(kuò)展名的文件,看下面的例子:

$ touch {a,b,c}.{hpp,cpp}
$ ls
a.cpp  a.hpp  b.cpp  b.hpp  c.cpp  c.hpp

在路徑中使用或括號(hào)擴(kuò)展

假設(shè)有兩個(gè)路徑,其目錄結(jié)構(gòu)是類似的,只有很少的一部分不一樣(比如中間某個(gè)文件夾名稱不同),這個(gè)時(shí)候,花括號(hào)擴(kuò)展會(huì)非常有用。 看下面代碼:

mv project/{new,old}/dir/file

其相當(dāng)于:

mv project/new/dir/file project/old/dir/file

并非所有內(nèi)容都可擴(kuò)展

這是不言而喻的。 如果你希望創(chuàng)建一個(gè)序列,給出的條件應(yīng)該是可以創(chuàng)建成序列的東西。 如果你使用的是一個(gè)很奇怪的組合,將不能被擴(kuò)展。 比如:

$ echo {1..Z}
{1..Z}

另外,也不能使用小數(shù):

$ echo {1..5..0.5}
{1..5..0.5}

一些奇怪的組合,也會(huì)生成奇怪的結(jié)果:

$ 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

當(dāng)你剛開(kāi)始接觸花括號(hào)擴(kuò)展時(shí),會(huì)覺(jué)得它很麻煩。 但是,手動(dòng)打字會(huì)更耗費(fèi)時(shí)間。 一旦你熟悉了它,那你的 Linux 技能會(huì)更上一個(gè)臺(tái)階。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11182

    瀏覽量

    208540
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4701

    瀏覽量

    68121
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    361

    瀏覽量

    23239
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【RT-Thread學(xué)習(xí)筆記】bash shell -e參數(shù)

    bash shell -e參數(shù)的含義與用途,你了解嗎?
    的頭像 發(fā)表于 07-28 05:20 ?1729次閱讀
    【RT-Thread學(xué)習(xí)筆記】<b class='flag-5'>bash</b> <b class='flag-5'>shell</b> -e參數(shù)

    何在bash shell腳本中使用變量

    如果你使用編程語(yǔ)言編寫過(guò)程序,那么一定接觸過(guò)變量。而在 bash 腳本的編寫時(shí),變量也是一個(gè)很重要的概念。今天我們分享一下如何在 bash 腳本中使用變量。
    發(fā)表于 12-02 16:32 ?1982次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b> <b class='flag-5'>shell</b>腳本<b class='flag-5'>中使</b>用變量

    何在bash腳本中創(chuàng)建第一個(gè)數(shù)組

    在前面的文章中,我們介紹了如何在 bash 中使用有限數(shù)量的變量,比如要保存一個(gè)或兩個(gè)文件名或用戶名。
    發(fā)表于 12-02 16:53 ?825次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b>腳本中創(chuàng)建第一個(gè)數(shù)組

    何在bash中使用條件語(yǔ)句

    今天我們介紹一下如何在 bash 中使用條件語(yǔ)句。
    的頭像 發(fā)表于 12-09 17:27 ?2073次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b><b class='flag-5'>中使</b>用條件語(yǔ)句

    一個(gè)小而美的嵌入式shell - letter shell

    無(wú)誤的操作工作。Shell有著不同的分類,比如Bourne shell(sh),Korn shell(ksh)、C shell (csh)、Bourne-again
    的頭像 發(fā)表于 06-10 15:11 ?8042次閱讀
    一個(gè)小而美的嵌入式<b class='flag-5'>shell</b> - letter <b class='flag-5'>shell</b>

    shell中的各種括號(hào)的使用方法 linux基礎(chǔ)學(xué)習(xí)

    Linux中小括號(hào)()和大括號(hào){}都是對(duì)其中的一串命令進(jìn)行執(zhí)行,但有一定的區(qū)別,其具體含義如下:( ):括號(hào)內(nèi)的命令會(huì)在一個(gè)子shell中執(zhí)行(( )):將
    發(fā)表于 01-16 14:21

    如何更新Vivado 2014.2中的bash shell版本?

    如何更新Vivado 2014.2中的bash shell版本?謝謝!
    發(fā)表于 03-20 07:47

    在ucosiii編譯時(shí)出現(xiàn)括號(hào)的問(wèn)題是 什么原因?

    編譯的時(shí)候出現(xiàn)這種錯(cuò)誤,括號(hào)出現(xiàn)問(wèn)題。void函數(shù)下面的括號(hào)也出現(xiàn)問(wèn)題,請(qǐng)問(wèn)是什么原因?
    發(fā)表于 05-11 23:57

    Linux_Bash腳本編程大全

    毫無(wú)疑問(wèn),UNIX/Linux 最重要的軟件之一就是shell,目前最流行的shell 被稱為Bash(Bourne Again Shell),幾乎所有的Linux 和絕大部分的UNI
    發(fā)表于 10-22 16:17 ?57次下載

    【RT-Thread學(xué)習(xí)筆記】bash和dash-shell

    ? 最近在工作中遇到一個(gè)很奇葩的問(wèn)題,就是一個(gè)嵌入式的SDK編譯,它里面執(zhí)行shell命令的時(shí)候,使用的dash shell來(lái)解析,而通常我們默認(rèn)用的是bash shell來(lái)解析;我按
    的頭像 發(fā)表于 07-30 13:49 ?1154次閱讀
    【RT-Thread學(xué)習(xí)筆記】<b class='flag-5'>bash</b>和dash-<b class='flag-5'>shell</b>

    何在bash shell腳本中接受參數(shù)

    終端命令通常包含一些參數(shù),在使用的時(shí)候可以提供不同的參數(shù)來(lái)確定命令的執(zhí)行方式。POSIX規(guī)范中包含了用于命令行接口的選項(xiàng)。這也是與最早的UNIX應(yīng)用程序建立的一個(gè)由來(lái)已久的約定,所以當(dāng)你在寫bash腳本的時(shí)候,需要知道如何在腳本中接受參數(shù)。
    的頭像 發(fā)表于 12-09 17:34 ?2593次閱讀

    每個(gè)Linux用戶都需要知道的重要Bash shell變量

    Bash 是大多數(shù) Linux 發(fā)行版的默認(rèn) shell。以下是每個(gè) Linux 用戶都需要知道的一些重要的 Bash shell 變量。
    的頭像 發(fā)表于 02-13 09:22 ?822次閱讀

    BASH shell腳本篇—條件命令

    這篇文章介紹下BASH shell中的條件相關(guān)的命令,包括:if, case, while, until, for, break, continue。
    的頭像 發(fā)表于 10-11 15:21 ?533次閱讀
    <b class='flag-5'>BASH</b> <b class='flag-5'>shell</b>腳本篇—條件命令

    BASH shell腳本篇—函數(shù)

    函數(shù)是代碼重用的最重要方式。Bash函數(shù)可以定義為一組命令,在bash腳本中多次調(diào)用。
    的頭像 發(fā)表于 10-20 16:31 ?844次閱讀

    BASH shell腳本篇—文件處理介紹

    Bash Shell腳本中,可以使用多種方法來(lái)對(duì)文件進(jìn)行操作,包括讀取文件或?qū)懭胛募?/div>
    的頭像 發(fā)表于 10-23 16:51 ?540次閱讀