欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

bash的歷史擴(kuò)展功能是什么

今天就跟大家聊聊有關(guān)bash 的歷史擴(kuò)展功能是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

烏拉特中網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,烏拉特中網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為烏拉特中1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的烏拉特中做網(wǎng)站的公司定做!

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

  1. 首先要從歷史命令中找出相對(duì)應(yīng)的命令,被選擇到的命令我們稱作為Event(條目),比如Bang Bang(!!),就是選擇最后一條命令;

  2. 選擇選定行的部分或全部文本以包含到當(dāng)前行中。要操作的條目(Event)Bash將其拆分成了Words(詞),命令中的Words是靠空格來分割的,我們就可以使用修飾符(Modifiers)來調(diào)整Words以符合我們的要求。注意:Words并不是英文單詞,而是一個(gè)字符序列而已。

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

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

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

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

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

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

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

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

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

修飾符(Modifiers)

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

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

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

test $eee /tmp/test.logecho !test:Gs/t/a/;## 這個(gè)返回的test被替換兩次## 但后面的參數(shù)僅替換一次

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

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

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

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

  1. 我們首先是選出命令!!(!:0可以寫成!!:0,!*同樣可以寫成!!*)

  2. 有了命令之后我們選擇第二步,利用0,選擇出詞(!:0選擇出來的是cat)

  3. 第三步是對(duì)詞進(jìn)行操作,這里是!*后面對(duì)參數(shù)進(jìn)行了字符替換。

  4. 最后變成完成的命令了: cat /tmp/echo.echo.txt

看完上述內(nèi)容,你們對(duì)bash 的歷史擴(kuò)展功能是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

標(biāo)題名稱:bash的歷史擴(kuò)展功能是什么
瀏覽地址:http://chinadenli.net/article10/iegsgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站維護(hù)、微信小程序、搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
国产成人精品午夜福利av免费| 手机在线观看亚洲中文字幕| 国产精品熟女乱色一区二区 | 人妻精品一区二区三区视频免精| 樱井知香黑人一区二区| 亚洲三级视频在线观看免费| 亚洲精品日韩欧美精品| 国产又粗又长又大高潮视频| 国产日韩精品激情在线观看| 麻豆视频传媒入口在线看| 久久人妻人人澡人人妻| 久久精视频免费视频观看| 日韩精品你懂的在线观看| 东京热男人的天堂社区| 丰满人妻熟妇乱又伦精另类视频 | 在线免费不卡亚洲国产| 色婷婷在线精品国自产拍| 国产亚洲视频香蕉一区| 亚洲精品熟女国产多毛| 在线精品首页中文字幕亚洲| 这里只有九九热精品视频| 日韩美成人免费在线视频 | 亚洲另类女同一二三区| 国产精品一区二区香蕉视频| 欧美精品久久男人的天堂| 中文字幕不卡欧美在线| 最近日韩在线免费黄片| 欧美中文日韩一区久久| 一区二区三区亚洲天堂| 欧美日韩三区在线观看| 午夜精品久久久免费视频 | 国产又粗又长又大高潮视频| 国产99久久精品果冻传媒| 欧美日韩乱一区二区三区| 隔壁的日本人妻中文字幕版| 精品日韩av一区二区三区| 好骚国产99在线中文| 在线观看视频日韩成人| 成人免费视频免费观看| 亚洲av日韩一区二区三区四区| 日韩欧美一区二区不卡视频|