高階bash程式設計指南(八)

2022-06-03 03:51:11 字數 1262 閱讀 2259

一 正規表示式

1.在這裡就不詳細列舉正規表示式中各種元字元的功能

僅僅說一下,在看這一章遇到的乙個小問題

* 匹配前乙個字元的任意多次(包括零次)

eg "1133*",更明確的應該寫成"113(3*)"

可以理解它匹配113(0個3) 1133(1個3),但是為什麼可以

匹配111312?

111312 因為它是這樣匹配的此時匹配了1個3,並沒有匹配

開頭和結尾,要想匹配開頭和結尾的話,需要改成"^1133*$" ,

此時就只能匹配以113開頭,且後面有n(n>=0)個3的情況。

二 通配

下面介紹另一概念:通配。這是乙個很容易跟正規表示式混淆的概念。

bash本省沒有正規表示式的功能,在指令碼裡,使用正規表示式的是命令和軟體包。

eg sed,grep和awk,他們可以解釋正規表示式。

bash所做的時展開檔名擴充套件---這就是所謂的通配(globbing)--單它不是使用標準的

正規表示式。而是使用萬用字元。通配解釋標準的萬用字元*和?,方括號括起來的字元,

還有其他的一些特殊的字元(eg用^表示反匹配;然而^在正規表示式中匹配一行的開始。

同時注意在正規表示式中[^b-d]和^[b-d]的區別,前者表示匹配b,c,d之外的字元,後者表示

以b,c,d開頭的)。然而匹配機制的萬用字元有很大的侷限性。包含有*號的字串將不會匹配

以點卡頭的檔案。

三 subshell

1.外部命令能生成乙個子程序,然而內建命令卻不,因此內建明亮比外部命令執行效率高。

2.(command1,command2,..)嵌在圓括號裡的一列命令在乙個子shell中執行,在子shell

裡與你效能該的變數不能被這段子shell**塊之外的指令碼訪問。只有export某些變數後,

該子shell的子程序中才能訪問。在中執行的命令不會產生乙個子shell,在其中執行。

3.eg.

#!/bin/bash

show()

(var1=200)

echo $va $var1  #result  100 null

四 程序替換

1.程序替換與命令很相似。命令替換把乙個命令的結果賦給乙個變數。

eg,var=`ls -l` or var=$(ls -l),程序替換是把乙個程序的輸出回饋給另一程序,

即把乙個命令的結果傳送給另一命令,有點管道的意思。

<(command),>(command)

值得注意的是<,>和(之間沒有空格。

高階bash程式設計指南(十)

1.設定選項 1 bash n scriptname 不會實際執行指令碼,而只是檢查標本的語法錯誤,也可以在指令碼中新增 set n 或者set o noexec 2 bash v scriptname在實際執行乙個命令或者指令碼前列印出這個命令或者指令碼的內容,也可以在指令碼中新增set v 或者...

Bash高階程式設計的閱讀

bin bash echo here echo there myfile myfile if x myfile then echo file myfile is exit cp myfile myfile.bak else echo file myfile not find touch myfile...

高階語言程式設計實驗八

題目描述 對 k 1,2,3,14,15,按下式分別計算出 15 組 i,d,c 整數 i 2k 1 實數 d kk k 9.8 字元 c h k。並通過使用運算子 將這15組資料儲存到當前目錄下自定義的text型磁碟檔案ft.txt之中。輸入 無 輸出 檔案內容格式如下 1 7.8 i 3 3.8...