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

理解Bash中的尖括號(hào)

系統(tǒng) Linux
Bash 內(nèi)置了很多諸如 ls、cd、mv 這樣的重要的命令,也有很多諸如 grep、awk、sed 這些有用的工具。但除此之外,其實(shí) Bash 中還有很多可以起到膠水作用的標(biāo)點(diǎn)符號(hào),例如點(diǎn)號(hào)(.)、逗號(hào)(,)、括號(hào)(<>)、引號(hào)(")之類。

[[257019]]

為初學(xué)者介紹尖括號(hào)。

Bash 內(nèi)置了很多諸如 ls、cd、mv 這樣的重要的命令,也有很多諸如 grep、awk、sed 這些有用的工具。但除此之外,其實(shí) Bash 中還有很多可以起到膠水作用的標(biāo)點(diǎn)符號(hào),例如點(diǎn)號(hào)(.)、逗號(hào)(,)、括號(hào)(<>)、引號(hào)(")之類。下面我們就來(lái)看一下可以用來(lái)進(jìn)行數(shù)據(jù)轉(zhuǎn)換和轉(zhuǎn)移的尖括號(hào)(<>)。

轉(zhuǎn)移數(shù)據(jù)

如果你對(duì)其它編程語(yǔ)言有所了解,你會(huì)知道尖括號(hào) <> 一般是作為邏輯運(yùn)算符,用來(lái)比較兩個(gè)值之間的大小關(guān)系。如果你還編寫 HTML,尖括號(hào)作為各種標(biāo)簽的一部分,就更不會(huì)讓你感到陌生了。

在 shell 腳本語(yǔ)言中,尖括號(hào)可以將數(shù)據(jù)從一個(gè)地方轉(zhuǎn)移到另一個(gè)地方。例如可以這樣把數(shù)據(jù)存放到一個(gè)文件當(dāng)中:

  1. ls > dir_content.txt

在上面的例子中,> 符號(hào)讓 shell 將 ls 命令的輸出結(jié)果寫入到 dir_content.txt 里,而不是直接顯示在命令行中。需要注意的是,如果 dir_content.txt 這個(gè)文件不存在,Bash 會(huì)為你創(chuàng)建;但是如果 dir_content.txt 是一個(gè)已有的非空文件,它的內(nèi)容就會(huì)被覆蓋掉。所以執(zhí)行類似的操作之前務(wù)必謹(jǐn)慎。

你也可以不使用 > 而使用 >>,這樣就可以把新的數(shù)據(jù)追加到文件的末端而不會(huì)覆蓋掉文件中已有的數(shù)據(jù)了。例如:

  1. ls $HOME > dir_content.txt; wc -l dir_content.txt >> dir_content.txt

在這串命令里,首先將家目錄的內(nèi)容寫入到 dir_content.txt 文件中,然后使用 wc -l 計(jì)算出 dir_content.txt 文件的行數(shù)(也就是家目錄中的文件數(shù))并追加到 dir_content.txt 的末尾。

在我的機(jī)器上執(zhí)行上述命令之后,dir_content.txt 的內(nèi)容會(huì)是以下這樣:

  1. Applications
  2. bin
  3. cloud
  4. Desktop
  5. Documents
  6. Downloads
  7. Games
  8. ISOs
  9. lib
  10. logs
  11. Music
  12. OpenSCAD
  13. Pictures
  14. Public
  15. Templates
  16. test_dir
  17. Videos
  18. 17 dir_content.txt

你可以將 >>> 作為箭頭來(lái)理解。當(dāng)然,這個(gè)箭頭的指向也可以反過(guò)來(lái)。例如,Coen brothers (LCTT 譯注:科恩兄弟,一個(gè)美國(guó)電影導(dǎo)演組合)的一些演員以及他們出演電影的次數(shù)保存在 CBActors 文件中,就像這樣:

  1. John Goodman 5
  2. John Turturro 3
  3. George Clooney 2
  4. Frances McDormand 6
  5. Steve Buscemi 5
  6. Jon Polito 4
  7. Tony Shalhoub 3
  8. James Gandolfini 1

你可以執(zhí)行這樣的命令:

  1. sort < CBActors
  2. Frances McDormand 6 # 你會(huì)得到這樣的輸出
  3. George Clooney 2
  4. James Gandolfini 1
  5. John Goodman 5
  6. John Turturro 3
  7. Jon Polito 4
  8. Steve Buscemi 5
  9. Tony Shalhoub 3

就可以使用 sort 命令將這個(gè)列表按照字母順序輸出。但是,sort 命令本來(lái)就可以接受傳入一個(gè)文件,因此在這里使用 < 會(huì)略顯多余,直接執(zhí)行 sort CBActors 就可以得到期望的結(jié)果。

如果你想知道 Coens 最喜歡的演員是誰(shuí),你可以這樣操作。首先:

  1. while read name surname films; do echo $films $name $surname > filmsfirst.txt; done < CBActors

上面這串命令寫在多行中可能會(huì)比較易讀:

  1. while read name surname films;\
  2. do
  3. echo $films $name $surname >> filmsfirst;\
  4. done < CBActors

下面來(lái)分析一下這些命令做了什么:

  • while …; do … done 是一個(gè)循環(huán)結(jié)構(gòu)。當(dāng) while 后面的條件成立時(shí),dodone 之間的部分會(huì)一直重復(fù)執(zhí)行;
  • read 語(yǔ)句會(huì)按行讀入內(nèi)容。read 會(huì)從標(biāo)準(zhǔn)輸入中持續(xù)讀入,直到?jīng)]有內(nèi)容可讀入;
  • CBActors 文件的內(nèi)容會(huì)通過(guò) < 從標(biāo)準(zhǔn)輸入中讀入,因此 while 循環(huán)會(huì)將 CBActors 文件逐行完整讀入;
  • read 命令可以按照空格將每一行內(nèi)容劃分為三個(gè)字段,然后分別將這三個(gè)字段賦值給 name、surnamefilms 三個(gè)變量,這樣就可以很方便地通過(guò) echo $films $name $surname >> filmsfirst;\ 來(lái)重新排列幾個(gè)字段的放置順序并存放到 filmfirst 文件里面了。

執(zhí)行完以后,查看 filmsfirst 文件,內(nèi)容會(huì)是這樣的:

  1. 5 John Goodman
  2. 3 John Turturro
  3. 2 George Clooney
  4. 6 Frances McDormand
  5. 5 Steve Buscemi
  6. 4 Jon Polito
  7. 3 Tony Shalhoub
  8. 1 James Gandolfini

這時(shí)候再使用 sort 命令:

  1. sort -r filmsfirst

 

就可以看到 Coens 最喜歡的演員是 Frances McDormand 了。(-r 參數(shù)表示降序排列,因此 McDormand 會(huì)排在最前面)

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

2019-02-12 16:20:24

Bash尖括號(hào)命令

2019-03-18 15:53:11

BashLinux花括號(hào)

2019-04-22 14:39:05

BashLinux命令

2019-04-15 11:10:34

Bash方括號(hào)命令行

2019-03-05 22:15:08

BashLinux命令

2023-01-13 12:37:43

Bashshell花括號(hào)

2024-03-04 08:49:44

2019-03-08 11:00:32

BashLinux

2022-12-13 12:55:15

Bash循環(huán)

2023-08-22 21:42:03

Bash函數(shù)

2020-10-29 07:09:07

編程花括號(hào)程序員

2022-12-09 07:58:52

Bash條件語(yǔ)句

2011-03-10 14:55:05

JavaScript

2022-12-08 12:05:03

Bash字符串

2022-11-30 07:47:00

Bash腳本

2022-08-31 08:33:54

Bash操作系統(tǒng)Linux

2021-05-11 07:50:31

BashShell腳本

2022-10-24 07:57:47

DebianUbuntuLinux

2020-07-01 18:31:14

Linuxbash永遠(yuǎn)循環(huán)

2014-11-11 15:25:30

PHPWeb
點(diǎn)贊
收藏

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