您好,登錄后才能下訂單哦!
怎么理解Bash中的尖括號,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
為初學者介紹尖括號。
Bash 內置了很多諸如 ls
、cd
、mv
這樣的重要的命令,也有很多諸如 grep
、awk
、sed
這些有用的工具。但除此之外,其實 Bash 中還有很多可以起到膠水作用的標點符號,例如點號(.
)、逗號(,
)、括號(<>
)、引號("
)之類。下面我們就來看一下可以用來進行數據轉換和轉移的尖括號(<>
)。
如果你對其它編程語言有所了解,你會知道尖括號 <
和 >
一般是作為邏輯運算符,用來比較兩個值之間的大小關系。如果你還編寫 HTML,尖括號作為各種標簽的一部分,就更不會讓你感到陌生了。
在 shell 腳本語言中,尖括號可以將數據從一個地方轉移到另一個地方。例如可以這樣把數據存放到一個文件當中:
ls > dir_content.txt
在上面的例子中,>
符號讓 shell 將 ls
命令的輸出結果寫入到 dir_content.txt
里,而不是直接顯示在命令行中。需要注意的是,如果 dir_content.txt
這個文件不存在,Bash 會為你創建;但是如果 dir_content.txt
是一個已有的非空文件,它的內容就會被覆蓋掉。所以執行類似的操作之前務必謹慎。
你也可以不使用 >
而使用 >>
,這樣就可以把新的數據追加到文件的末端而不會覆蓋掉文件中已有的數據了。例如:
ls $HOME > dir_content.txt; wc -l dir_content.txt >> dir_content.txt
在這串命令里,首先將家目錄的內容寫入到 dir_content.txt
文件中,然后使用 wc -l
計算出 dir_content.txt
文件的行數(也就是家目錄中的文件數)并追加到 dir_content.txt
的末尾。
在我的機器上執行上述命令之后,dir_content.txt
的內容會是以下這樣:
ApplicationsbincloudDesktopDocumentsDownloadsGamesISOsliblogsMusicOpenSCADPicturesPublicTemplatestest_dirVideos17 dir_content.txt
你可以將 >
和 >>
作為箭頭來理解。當然,這個箭頭的指向也可以反過來。例如,Coen brothers (LCTT 譯注:科恩兄弟,一個美國電影導演組合)的一些演員以及他們出演電影的次數保存在 CBActors
文件中,就像這樣:
John Goodman 5John Turturro 3George Clooney 2Frances McDormand 6Steve Buscemi 5Jon Polito 4Tony Shalhoub 3James Gandolfini 1
你可以執行這樣的命令:
sort < CBActorsFrances McDormand 6 # 你會得到這樣的輸出George Clooney 2James Gandolfini 1John Goodman 5John Turturro 3Jon Polito 4Steve Buscemi 5Tony Shalhoub 3
就可以使用 sort 命令將這個列表按照字母順序輸出。但是,sort
命令本來就可以接受傳入一個文件,因此在這里使用 <
會略顯多余,直接執行 sort CBActors
就可以得到期望的結果。
如果你想知道 Coens 最喜歡的演員是誰,你可以這樣操作。首先:
while read name surname films; do echo $films $name $surname > filmsfirst.txt; done < CBActors
上面這串命令寫在多行中可能會比較易讀:
while read name surname films;\ do echo $films $name $surname >> filmsfirst;\ done < CBActors
下面來分析一下這些命令做了什么:
while …; do … done 是一個循環結構。當 while
后面的條件成立時,do
和 done
之間的部分會一直重復執行;
read 語句會按行讀入內容。read
會從標準輸入中持續讀入,直到沒有內容可讀入;
CBActors
文件的內容會通過 <
從標準輸入中讀入,因此 while
循環會將 CBActors
文件逐行完整讀入;
read
命令可以按照空格將每一行內容劃分為三個字段,然后分別將這三個字段賦值給 name
、surname
和 films
三個變量,這樣就可以很方便地通過 echo $films $name $surname >> filmsfirst;\
來重新排列幾個字段的放置順序并存放到 filmfirst
文件里面了。
執行完以后,查看 filmsfirst
文件,內容會是這樣的:
5 John Goodman3 John Turturro2 George Clooney6 Frances McDormand5 Steve Buscemi4 Jon Polito3 Tony Shalhoub1 James Gandolfini
這時候再使用 sort
命令:
sort -r filmsfirst
就可以看到 Coens 最喜歡的演員是 Frances McDormand 了。(-r
參數表示降序排列,因此 McDormand 會排在最前面)
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。