成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

感嘆號:bash 的歷史擴(kuò)展功能

開發(fā) 開發(fā)工具 系統(tǒng)運維
Bash 的歷史擴(kuò)展(History Expansion)又被稱為 Bang(!) 命令,歷史擴(kuò)展是 bash 將歷史命令轉(zhuǎn)換到可執(zhí)行命令的過程。Bash 下的 History 庫提供了一個與 csh 下歷史擴(kuò)展類似的歷史擴(kuò)展功能。

[[137365]]

Bash 的歷史擴(kuò)展(History Expansion)又被稱為 Bang(!) 命令,歷史擴(kuò)展是 bash 將歷史命令轉(zhuǎn)換到可執(zhí)行命令的過程。Bash 下的 History 庫提供了一個與 csh 下歷史擴(kuò)展類似的歷史擴(kuò)展功能。歷史擴(kuò)展中操作歷史命令一般有兩個部分:

  1. 首先要從歷史命令中找出相對應(yīng)的命令,被選擇到的命令我們稱作為Event(條目),比如Bang Bang(!!),就是選擇***一條命令;
  2. 選擇選定行的部分或全部文本以包含到當(dāng)前行中。要操作的條目(Event)Bash將其拆分成了Words(詞),命令中的Words是靠空格來分割的,我們就可以使用修飾符(Modifiers)來調(diào)整Words以符合我們的要求。注意:Words并不是英文單詞,而是一個字符序列而已。

先來看兩個命令,你知道第二個命令是什么意思么?

  1. cat /tmp/cat.cat.txt
  2. !:0 !*:gs/cat./echo.

 

條目標(biāo)志符(Event Designators)

條目標(biāo)志符是一個到歷史列表內(nèi)一個命令行實體的引用,除非是絕對引用,不然條目的引用是相對歷史列表中當(dāng)前位置的。

條目標(biāo)志符 條目標(biāo)志符說明
! 開始一個歷史替換,除非后面緊跟的是空格,制表符,行結(jié)束符,"=","("(當(dāng)使用內(nèi)建命令shopt開啟了extglob的shell選項)。
!n 重復(fù)歷史中編號為n的命令——歷史編號可以參看history命令.
!-n 執(zhí)行之前的第n條命令,執(zhí)行上一條命令可以使用!!或者!-1,執(zhí)行之前第三條命令:!-3,倒推的列表是history。
!! 執(zhí)行上一條命令,和Ctrl-P,!-1的作用一樣。
!string 執(zhí)行最近的以string字串開頭的命令。這個命令的意思是重復(fù)以!后字串開頭的***一條命令,比如:!ca將重復(fù)以字符ca開頭的***一條命令,如cat ReadMe,(假設(shè)最近一條ca開頭是這個命令,并且ReadMe后緊跟換行符)
!?string[?] 在歷史列表中以當(dāng)前位置開始向后查找(往回搜索)包含string字符串的最近一條命令,如果要查找的string字符串后面緊跟換行符,則string后面的這個問號可以省略。例如:!?Read?還是會匹配cat ReadMe。(同上的環(huán)境),如果后面是換行符如:!?ReadMe,則不用輸入結(jié)尾的[?]。
^a^b 快速替換,把上一條命令中的a替換成b,并執(zhí)行替換后的命令。^a^b^類似。注意:這里只是替換一個找到的實例,相當(dāng)于:!!:s/a/b
^abc 刪除上一條命令中的abc。
!# 引用目前輸入的所有字串,如:more a !#;這個最終的命令是more a more a。

詞標(biāo)志符(Word Designators)

詞標(biāo)志符被用來在條目里面選擇需要的詞。一般用":"分隔條目指示符和詞指示符。當(dāng)詞指示符是以"^","$","*","-","%"開頭時,也可能會省略":"。詞是從一行的行首開始,***個詞編號為0.插入到當(dāng)前行中時,這些詞使用單個空格分隔。

詞標(biāo)志符 詞標(biāo)志符說明
0 第0個詞,在很多應(yīng)用程序中,這就是命令本身。
n 第n個詞
^ ***個參數(shù);也就是***個詞。
$ ***一個參數(shù)。
% 最近"?string?"匹配的詞。
x-y 詞的范圍:如果是'0-y'可以簡寫成'-y'.
* 除了第0個以外的所有詞,這個和'1-$'同義,如果條目中只有一個詞,使用'*'也不會返回錯誤,僅是返回一個空字符串而已。
x* 'x-$'的簡寫
x- 和x*類似,都是'x-$'的簡寫,不過需要注意,這個寫法是忽略***一個詞的。

需要注意的是,在Bash下使用詞指示符的時候,可以沒有條目指示符,如果沒有使用條目指示符,則會把前一條命令作為詞指示符的操作條目。

 

修飾符(Modifiers)

在可選的詞指示符之后,你可以添加下面修飾符中的一個或多個,每個修飾符以':'開頭。

修飾符 修飾符說明
h 去掉路徑名的尾部,只保留頭部。只移除***一個'/'后面的內(nèi)容,可以理解成是路徑名的父目錄。
t 去掉路徑名部件中除尾部之外的所有內(nèi)容。只保留***一個'/'后的內(nèi)容。
r 去掉尾部這樣格式".suffix"的一個結(jié)尾后綴,保留基本名稱。只刪除***一個點'.'后的內(nèi)容。
e 僅保留后綴。僅保留***一個點'.'及點后的內(nèi)容。
p 打印新的命令但不執(zhí)行。
q 引用替換的詞,防止進(jìn)一步替換。(譯注,原文:Quote the substituted words, escapin further substitutions.——Mitchell Chu)。這個引用會直接對引用的命令加上單引號,防止進(jìn)一步替換。開始這句不知道怎么翻譯。后來Mitchell發(fā)現(xiàn)自己的這個翻譯并沒有錯誤,因為我們引用的詞可能是個變量,這時候如果沒有引號,就會引起進(jìn)一步的替換,而是用此參數(shù)就能達(dá)到防止這種情況的發(fā)生。
x 這個和q一樣,是引用替換的詞,但是這個與q不同的地方在于,q是整體引用,而這個是會將替換的詞使用空格,制表符,換行符來分割成一個個的詞。
s/old/new/ 把條目行中找到的***個old位置的內(nèi)容替換成new位置的內(nèi)容,'/'這個分隔符位置可以使用任何其他字符作為分隔符。如果要在old或new位置使用分隔符,需要使用反斜桿'\'來轉(zhuǎn)義。如果'&'這個字符出現(xiàn)在new位置,將會被替換成old位置的內(nèi)容,如果要使用'&'請用'\'轉(zhuǎn)義。***一個分隔符如果是整行的***一個字符,則可以省略。
& 重復(fù)上次替換。這個是引用***一次的s/old/new/內(nèi)容。
g 見下,與a相同
a 使替換在整個條目中進(jìn)行,和's'一起使用,例如:!!:gs/old/new/,或者和'&'一起使用。
G

對條目中的每一個詞都執(zhí)行一次其后的's'修飾符。這個方法在Bash 4.1.2下測試并不靠譜。

  1. test $eee /tmp/test.log
  2. echo !test:Gs/t/a/;
  3. ## 這個返回的test被替換兩次
  4. ## 但后面的參數(shù)僅替換一次

因此Mitchell在想,是不是僅對參數(shù)執(zhí)行一次,而對命令(第0個詞)進(jìn)行全局替換。但另外一個測試,反駁了這個觀點:

  1. aaaaaaaaaaa $aaaaaaa /tmp/aaaaaaaaaaaaa.log
  2. echo !aaaa:q:Gs/a/t/
  3. ## 此時,最多的替換出現(xiàn)在!:0,兩次!

但多次測試結(jié)果來看,第零個詞匯被替換最多兩次,其他只替換一次。具體原因暫時未知!

了解了這些,我們來揭曉一下文章開頭的命令的意義:

  1. 我們首先是選出命令!!(!:0可以寫成!!:0,!*同樣可以寫成!!*)
  2. 有了命令之后我們選擇第二步,利用0,選擇出詞(!:0選擇出來的是cat)
  3. 第三步是對詞進(jìn)行操作,這里是!*后面對參數(shù)進(jìn)行了字符替換。
  4. ***變成完成的命令了: cat /tmp/echo.echo.txt

(注:轉(zhuǎn)載時對原文有修改。)

來源:http://blog.useasp.net/archive/2014/06/03/use-bash-more-efficient-with-shortcuts-for-terminal-or-xtream-window-on-linux.aspx

責(zé)任編輯:林師授 來源: blog.useasp.net
相關(guān)推薦

2022-04-26 09:01:45

運算符TypeScript代碼

2020-08-13 09:35:50

Linux命令軟件

2020-12-24 10:40:44

Linux命令文件

2022-01-06 08:58:49

代碼

2021-12-19 13:41:46

WiFi電腦技術(shù)

2021-08-03 22:26:46

Go函數(shù)分頁

2009-12-25 17:20:13

Linux Bash命

2021-10-14 11:11:58

WiFi電腦網(wǎng)絡(luò)

2018-10-18 15:56:21

bash histor系統(tǒng)安全命令

2023-01-26 00:31:25

ASCIIBase64UTF-8

2009-04-23 14:05:28

Visual Stud歷史調(diào)試功能

2021-04-28 16:47:20

微信單刪好友移動應(yīng)用

2020-07-06 14:18:25

Linux 系統(tǒng) 數(shù)據(jù)

2023-01-13 12:37:43

Bashshell花括號

2013-11-20 14:51:37

移動4G

2009-12-28 09:41:40

Chrome瀏覽歷史

2009-08-13 18:00:48

Eclipse重構(gòu)功能擴(kuò)展點

2019-10-14 16:16:49

BashLinux命令

2017-05-16 09:25:46

混合云容量功能

2012-04-19 13:52:16

TitaniumMVCRedux
點贊
收藏

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

主站蜘蛛池模板: 男人天堂网av | 亚洲国产一区在线 | 亚洲精品在线免费观看视频 | 国产伦精品一区二区三区在线 | 日韩欧美亚洲一区 | 国外成人免费视频 | 亚洲视频一区 | 欧美炮房| 午夜国产在线 | 久久精品成人热国产成 | 色一阁| 凹凸日日摸日日碰夜夜 | 日本久草 | 超碰人人人人 | 在线国产小视频 | 国产日韩精品一区二区三区 | 亚洲国产成人久久久 | 日韩欧美一级片 | 国产精品美女久久久久久免费 | 艹逼网 | 91直接看 | 中文字幕免费中文 | 国产精品成人69xxx免费视频 | 精品亚洲一区二区 | 香蕉久久久久久 | 精品欧美色视频网站在线观看 | 日韩久久久久久 | 中文二区| 一级毛毛片 | 国产成人免费网站 | 久久精品在线播放 | 国产亚洲精品久久午夜玫瑰园 | 国产精品一区二区在线 | 久久久91精品国产一区二区三区 | 国产午夜视频 | 亚洲国产中文字幕 | 国产在线视频在线观看 | 伊伊综合网| av一区二区三区 | 蜜桃av鲁一鲁一鲁一鲁 | 在线观看免费av片 |