Shell 入門2 字串 陣列與註解

2021-08-20 02:32:50 字數 1893 閱讀 9490

單引號str='this is a string'

單引號:

·         任何字元都會原樣輸出,單引號字串中的變數是無效的;

·         不能出現單引號**義字元也無效)。

雙引號your_name='qinjx'

str="hello, i know your are \"$your_name\"! \n"

雙引號:

·         雙引號裡可以有變數

·         雙引號裡可以出現轉義字元

拼接字串

world="world"

greeting="hello, "$" !"(方法一:無空格連續拼接)

greeting_1="hello, $ !"(方法二:嵌入是拼接)

echo $greeting $greeting_1

獲取字串長度

string="world"

echo $ #輸出 5

提取子字串

以下例項從字串第 2 個字元開始擷取 4 個字元:

string="hello world!"

echo $ # 輸出 ello   

注意角標是從0開始

查詢子字串

查詢字元 is 的位置:

string="world is so beautiful!"

echo `expr index "$string" is`  # 輸出 7

注意: 以上指令碼中 "`" 是反引號,而不是單引號 "'",不要看錯了哦。 expr 是表示式標識

bash支援一維陣列(不支援多維陣列),並且沒有限定陣列的大小。

類似與c語言,陣列元素的下標由0開始編號。獲取陣列中的元素要利用下標,下標可以是整數或算術表示式,其值應大於或等於0。

定義陣列

在shell中,用括號來表示陣列,陣列元素用"空格"符號分割開。定義陣列的一般形式為:

陣列名=(值1 值2 ... 值n)

例如:array_name=(value0 value1 value2 value3)

或者array_name=(

value0

value1

value2

value3

)還可以單獨定義陣列的各個分量:

array_name[0]=value0

array_name[1]=value1

array_name[n]=valuen

可以不使用連續的下標,而且下標的範圍沒有限制。

讀取陣列

讀取陣列元素值的一般格式是:

$例如:

valuen=$

使用@符號可以獲取陣列中的所有元素,例如:

echo $

獲取陣列的長度

獲取陣列長度的方法與獲取字串長度的方法相同,例如:

# 取得陣列元素的個數

length=$

# 或者

length=$

# 取得陣列單個元素的長度

lengthn=$

以"#"開頭的行就是注釋,會被直譯器忽略。

sh裡沒有多行注釋,只能每一行加乙個#號。只能像這樣:

#--------------------------------------------

# this is a annotiation

# you can write everything here,

# it can』t be excuted

##### you can user not only one 『#』  #####

如果在開發過程中,遇到大段的**需要臨時注釋起來,過一會兒又取消注釋,怎麼辦呢?每一行加個#符號太費力了,可以把這一段要注釋的**用一對花括號括起來,定義成乙個函式,沒有地方呼叫這個函式,這塊**就不會執行,達到了和注釋一樣的效果。

2 字串查詢

kmp演算法 kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是實現乙個next 函式,函式本身包含了模式串的區域性匹配資訊。時間複雜度o m n 通過getnext 實現部分匹配值,然後利用kmp演算法計算是否匹配。如下 package li...

2 字串插入

描述 有兩個字串str和substr,str的字元個數不超過10,substr的字元個數為3。字元個數不包括字串結尾處的 0 將substr插入到str中ascii碼最大的那個字元後面,若有多個最大則只考慮第乙個。輸入 輸入包括若干行,每一行為一組測試資料,格式為 str substr 輸出 對於每...

Shell指令碼學習(3)字串和陣列

字串是shell程式設計中最常用最有用的資料型別 除了數字和字串,也沒啥其它型別好用了 字串可以用單引號,也可以用雙引號,也可以不用引號。單雙引號的區別跟php類似 單雙引號的區別 bin bash str1 i str2 love str3 you echo str1 str2 str3 echo...