linux shell程式設計學習--字串的使用和操作
在bash shell的使用過程中,經常會遇到一些字串string的操作,下面是個人的一些使用總結。
一、字串的定義
用雙引號,單引號,或者直接在接在=後,都可以定義一個字串,如下,定義了三個字串
str1="this is a string"
str2='this is a string'
str3=this_is
但雙引號和單引號,在bash中還是有區別的。
單引號引用,則保留字串的所有字元的字面含義,同時,單引號內不允許再出現單引號,也不會對轉義字元等進行轉義。
雙引號引用,則支援一些擴充套件,如$(美元符) \ (反斜槓)。\$可以引用後面的變數值,\(反斜槓)表示轉義。如下:
str="test_sting."
echo "\\$str" #輸出結果為:\test_string
echo '\\$str' #輸出結果為:\\$str
二、求字串長度
str="test_string"
echo ${#str} #得到長度9
三、字串比較
bash shell中的字串可以進行,大於,小於,等於,判斷是否為空,是否有值等操作。在相等的操作中,支援正則匹配。具體語法如下:
操作符 | 含義 | 舉例 |
---|---|---|
< | 小於 | [[ "1" < "2" ]] #true ASCII 字母順序 |
> | 大於 | [[ "2" > "1" ]] #true ASCII 字母順序 |
== | 等於(支援模式匹配) | [[ "aa" == "aa" ]] #true |
[[ "aaa" == a* ]] #true 模式匹配 模式匹配的時候,不能加雙引號 |
||
= | 等於,與==等價 | |
=~ | 判斷字串 | [[ "aa" =~ "a" ]] #true |
!= | 不等於 | [[ "a" != "b" ]] #true |
-z | 是否為空 | [[ -z ""]] #true |
-n | 是否非空 | [[ -n "a" ]] #true |
bash shell中在比較字串的時候,一般最好用”(雙引號)將值包含起來,避免空格的影響。但在使用d**==(模式匹配)**的時候,則不能使用雙引號
四、字串的截斷
可以使用#,##,%,%%等符號進行字串的截斷操作。bash shell的字串支援四種截斷方式,可以截斷左邊字元或者截斷右邊字元。
假設有字串str
str="This-is-a-test-string"
操作符 | 含義 | 舉例 |
---|---|---|
# | # 號擷取,從左邊擷取掉最短的匹配,保留右邊字元。 | echo ${str#*-} #得到is-a-test-string |
## | ##號擷取,從左邊擷取掉最長的匹配,保留右邊字元 | echo ${str##*-} #得到string |
% | %擷取,從右邊擷取最短的匹配,保留左邊字元 | echo ${str%-*} #得到This-is-a-test |
%% | %%擷取,從右邊擷取最長的匹配,保留左邊字元 | echo ${str%%-*} #得到This |
五、字串的擷取
shell字串支援任意位置的子串擷取。語法為:
${org_string:pos:length} 擷取從pos開始的length長度的子串
${org_string:pos:-length} 擷取從pos開始,擷取到距字串結束的length長度的位置的子串
${org_string:(-pos):length} 從距離字串結束的pos位置開始,擷取length長度的子串
${org_string:(-pos):-length} 從距離字串結束的pos位置開始,擷取到距字串結束的length長度的位置的子串
${org_string:pos}擷取從pos開始到字串結束
${org_string:(-pos)}從距離字串結束的pos位置開始,擷取到字串結束
具體用法,如下:
org_str="This-is-a-test-test-string"
echo ${org_str:0:4} #得到 This
echo ${org_str:0:-4} #得到 This-is-a-test-test-st
echo ${org_str:(-11):4} #得到 test
echo ${org_str:(-11):-4} #得到 test
echo ${org_str:4} #得到 -is-a-test-test-string
echo ${org_str(-6)} #得到 string
六、字串的替換
在bash shell的字串中,可以使用新的字串替換舊字串中的子串。
假設有字串org_str
org_str="This-is-a-test-test-string"
具體用法,如下表:
表示式 | 含義 | 舉例 |
---|---|---|
${org_str/sub_str/replace_str} | 使用$replace_str的值來替換第一個匹配的$sub_str | ${org_str/test/TEST} #得到This-is-a-TEST-test-string |
${org_str//sub_str/replace_str} | 使用$replace_str的值來替換全部匹配的$sub_str | ${org_str//test/TEST} #得到This-is-a-TEST-TEST-string |
${org_str/#sub_str/replace_str} | 如果$org_str是以$sub_str開始,使用$replace_str的值來替換$sub_str | ${org_str/#This/THIS} #得到THIS-is-a-test-test-string |
${org_str/%sub_str/replace_str} | 如果$org_str是以$sub_str結束,使用$replace_str的值來替換$sub_str | ${org_str/%string/STRING} #得到This-is-a-test-test-STRING |