自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在Bash中使用[方括號(hào)] (一)

系統(tǒng) Linux
看完花括號(hào)在命令行中的用法之后,現(xiàn)在我們繼續(xù)來(lái)看方括號(hào)([])在上下文中是如何發(fā)揮作用的。

[[262449]]

 這篇文章將要介紹方括號(hào)及其在命令行中的不同用法。

看完花括號(hào)在命令行中的用法之后,現(xiàn)在我們繼續(xù)來(lái)看方括號(hào)([])在上下文中是如何發(fā)揮作用的。

通配

方括號(hào)最簡(jiǎn)單的用法就是通配。你可能在知道“Globbing”這個(gè)概念之前就已經(jīng)通過(guò)通配來(lái)匹配內(nèi)容了,列出具有相同特征的多個(gè)文件就是一個(gè)很常見(jiàn)的場(chǎng)景,例如列出所有 JPEG 文件:

  1. ls *.jpg

使用通配符wildcard來(lái)得到符合某個(gè)模式的所有內(nèi)容,這個(gè)過(guò)程就叫通配。

在上面的例子當(dāng)中,星號(hào)(*)就代表“0 個(gè)或多個(gè)字符”。除此以外,還有代表“有且僅有一個(gè)字符”的問(wèn)號(hào)(?)。因此

  1. ls d*k*

可以列出 darklyducky,而且 darkduck 也是可以被列出的,因?yàn)?* 可以匹配 0 個(gè)字符。而

  1. ls d*k?

則只能列出 ducky,不會(huì)列出 darklydarkduck。

方括號(hào)也可以用于通配。為了便于演示,可以創(chuàng)建一個(gè)用于測(cè)試的目錄,并在這個(gè)目錄下創(chuàng)建文件:

  1. touch file0{0..9}{0..9}

(如果你還不清楚上面這個(gè)命令的原理,可以看一下另一篇介紹花括號(hào)的文章

執(zhí)行上面這個(gè)命令之后,就會(huì)創(chuàng)建 file000、file001、……、file099 這 100 個(gè)文件。

如果要列出這些文件當(dāng)中第二位數(shù)字是 7 或 8 的文件,可以執(zhí)行:

  1. ls file0[78]?

如果要列出 file022file027、file028、file052file057、file058、file092、file097、file098,可以執(zhí)行:

  1. ls file0[259][278]

當(dāng)然,不僅僅是 ls,很多其它的命令行工具都可以使用方括號(hào)來(lái)進(jìn)行通配操作。但在刪除文件、移動(dòng)文件、復(fù)制文件的過(guò)程中使用通配,你需要有一點(diǎn)橫向思維。

例如將 file010file029 這 30 個(gè)文件復(fù)制成 archive010archive029 這 30 個(gè)副本,不可以這樣執(zhí)行:

  1. cp file0[12]? archive0[12]?

因?yàn)橥ㄅ渲荒茚槍?duì)已有的文件,而 archive 開頭的文件并不存在,不能進(jìn)行通配。

而這條命令

  1. cp file0[12]? archive0[1..2][0..9]

也同樣不行,因?yàn)?cp 并不允許將多個(gè)文件復(fù)制到多個(gè)文件。在復(fù)制多個(gè)文件的情況下,只能將多個(gè)文件復(fù)制到一個(gè)指定的目錄下:

  1. mkdir archive
  2. cp file0[12]? archive

這條命令是可以正常運(yùn)行的,但它只會(huì)把這 30 個(gè)文件以同樣的名稱復(fù)制到 archive/ 目錄下,而這并不是我們想要的效果。

如果你閱讀過(guò)我關(guān)于花括號(hào)的文章,你大概會(huì)記得可以使用 % 來(lái)截掉字符串的末尾部分,而使用 # 則可以截掉字符串的開頭部分。

例如:

  1. myvar="Hello World"
  2. echo Goodbye Cruel ${myvar#Hello}

就會(huì)輸出 Goodbye Cruel World,因?yàn)?#Hellomyvar 變量中開頭的 Hello 去掉了。

在通配的過(guò)程中,也可以使用這一個(gè)技巧。

  1. for i in file0[12]?;\
  2. do\
  3. cp $i archive${i#file};\
  4. done

上面的第一行命令告訴 Bash 需要對(duì)所有 file01 開頭或者 file02 開頭,且后面只跟一個(gè)任意字符的文件進(jìn)行操作,第二行的 do 和第四行的 done 代表需要對(duì)這些文件都執(zhí)行這一塊中的命令。

第三行就是實(shí)際的復(fù)制操作了,這里使用了兩次 $i 變量:第一次在 cp 命令中直接作為源文件的文件名使用,第二次則是截掉文件名開頭的 file 部分,然后在開頭補(bǔ)上一個(gè) archive,也就是這樣:

  1. "archive" + "file019" - "file" = "archive019"

最終整個(gè) cp 命令展開為:

  1. cp file019 archive019

最后,順帶說(shuō)明一下反斜杠 \ 的作用是將一條長(zhǎng)命令拆分成多行,這樣可以方便閱讀。

在下一節(jié),我們會(huì)了解方括號(hào)的更多用法,敬請(qǐng)關(guān)注。


 

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2019-04-22 14:39:05

BashLinux命令

2023-01-13 12:37:43

Bashshell花括號(hào)

2020-10-13 19:04:58

Bash信號(hào)捕獲Shell腳本

2023-07-12 14:13:03

BashLinux

2022-12-14 10:08:00

BashLinux

2022-01-16 07:48:33

腳本Bash 工具

2023-07-20 15:37:50

Bash數(shù)組

2022-12-02 14:30:24

Bash腳本數(shù)組

2023-03-14 08:17:40

Bash編程語(yǔ)言

2020-04-09 10:18:51

Bash循環(huán)Linux

2020-02-05 14:17:48

Python數(shù)據(jù)結(jié)構(gòu)JavaScript

2020-02-05 16:37:06

方括號(hào)Python方法

2022-11-23 08:14:42

bash 腳本test 命令

2019-02-12 15:47:42

Bash尖括號(hào)命令

2019-03-18 15:53:11

BashLinux花括號(hào)

2018-12-14 10:00:16

BashLinux命令

2019-10-22 17:33:57

LinuxBash腳本

2009-06-25 16:49:24

Hibernate

2023-11-17 12:04:39

GORM并發(fā)

2013-12-13 17:21:14

Lua腳本語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)