Linux中使用 ${來修改變量}
小提示:Linux的變量修改方式類似于正則表達式灸促,匹配到字符后刪除或者用新字符來替換就字符
表達式 | 說明 |
---|---|
${變量名#匹配字串} |
從頭向后開始匹配羹饰,刪除符合匹配字串的最短數(shù)據(jù) |
${變量名##匹配字串} |
從頭向后開始匹配,刪除符合匹配字串的最長數(shù)據(jù) |
${變量名%匹配字串} |
從尾向前開始匹配,刪除符合匹配字串的最短數(shù)據(jù) |
${變量名%%匹配字串} |
從尾向前開始匹配,刪除符合匹配字串的最長數(shù)據(jù) |
${變量名/舊的字串/新的字串} |
將符合舊字串的第一個字串替換為新的字串 |
${變量名//舊的字串/新的字串} |
將符合舊字串的全部字串替換為新的字串 |
例子
要測試的變量
teststr
='123456789myvar@qq.com'
code5@code5-debian:~$ teststr='123456789myvar@qq.com'
code5@code5-debian:~$ echo $teststr
123456789myvar@qq.com
code5@code5-debian:~$
1、從頭向后開始匹配(#)
從頭向后開始匹配:從第一個字符開始匹配
${變量名#匹配字串} 從頭向后開始匹配,刪除符合匹配字串的最短數(shù)據(jù)
正確匹配
code5@code5-debian:~$ echo ${teststr#123}
456789myvar@qq.com
錯誤匹配
code5@code5-debian:~$ echo ${teststr#234}
123456789myvar@qq.com
code5@code5-debian:~$
2、從頭向后開始匹配(##)
${變量名##匹配字串} 從頭向后開始匹配示损,刪除符合匹配字串的最長數(shù)據(jù)
最長數(shù)據(jù):從第一個字符開始盡可能的匹配最多的字符
## 與 # 作用差不多渗磅,都是從第一個字符開始匹配,但 ## 會盡可能多的匹配字符
# 的匹配
code5@code5-debian:~$ echo ${teststr#1*m}
yvar@qq.com
##的匹配
code5@code5-debian:~$ echo ${teststr##1*m}
code5@code5-debian:~$
3检访、從尾向前開始匹配(%)
${變量名%匹配字串} 從尾向前開始匹配始鱼,刪除符合匹配字串的最短數(shù)據(jù)
與
#
作用差不多,但%
從最后一個字符開始匹配
正確匹配
code5@code5-debian:~$ echo ${teststr%com}
123456789myvar@qq.
code5@code5-debian:~$
錯誤匹配
code5@code5-debian:~$ echo ${teststr%".co"}
123456789myvar@qq.com
4脆贵、從尾向前開始匹配(%%)
${變量名%%匹配字串} 從尾向前開始匹配风响,刪除符合匹配字串的最長數(shù)據(jù)
%%
與##
差不多,但%%
從字符串末尾開始匹配丹禀,并盡可能的匹配更多的字符状勤,具體例子參考##
,這里不舉例子
5双泪、字符替換(/)
${變量名/舊的字串/新的字串} 將符合舊字串的第一個字串替換為新的字串
/
在字符串中搜索匹配的字符串并用新的內(nèi)容替換舊內(nèi)容持搜,與#
##
%
%%
不同的是/
不強制從頭尾字符開始匹配。
匹配變量中的 5678 并替換 8765
code5@code5-debian:~$ echo ${teststr/5678/8765}
123487659myvar@qq.com
code5@code5-debian:~$
6焙矛、字符替換(//)
${變量名//舊的字串/新的字串} 將符合舊字串的全部字串替換為新的字串
/
與//
都匹配并替換變量內(nèi)容葫盼,但/
只匹配第一個符合的內(nèi)容并替換 而//
會匹配所有符合的內(nèi)容并替換
把所有 m 替換成 ? :使用 /
(只替換第一個m)
code5@code5-debian:~$ echo ${teststr/m/?}
123456789?yvar@qq.com
code5@code5-debian:~$
把所有 m 替換成 ? :使用 //
(替換了所有m)
# 注意是 /? 不是 //?
code5@code5-debian:~$ echo ${teststr//m/?}
123456789?yvar@qq.co?
code5@code5-debian:~$