[TOC]
# shell中變量子字符串的常用操作
|id|表達式|說明|
|-|-|-|
|1|${#string}|返回$string的長度|
|2|${string:position}|在$string中,從$position之后開始提取子字符串|
|3|${string:position:length}|在$string中,從位置$position之后開始提取長度為$length的子串|
|4|${string#substring}|從變量$string開頭開始刪除最短匹配$substring子字符串|
|5|${string##substring}|從變量$string開頭開始刪除最長匹配$substring子字符串|
|6|${string%substring}|從變量$string結尾開始刪除最短匹配$substring子字符串|
|7|${string%%substring}|從變量$string結尾開始刪除最長匹配$substring子字符串|
|8|${string/substring/replace}|使用$replace,來替代第一個匹配$substring|
|9|${string/#substring/replace}|如果$string前綴匹配$substring,就用$replace來代替匹配$substring|
|10|${string/%substring/replace}|如果$string后綴匹配$substring,就用$replace來代替匹配$substring|
## 舉例說明
首先,定義變量`PHPER=“hello world”`,
~~~
[luo@LNMP-CenOS-6.5 ~]
$ PHPER="hello world"
[luo@LNMP-CenOS-6.5 ~]
$ echo ${PHPER}
hello world
~~~
### 返回變量PHPER的值長度
~~~
[luo@LNMP-CenOS-6.5 ~]
$ echo ${#PHPER}
11
~~~
### 截取變量值從第2個字符之后開始取,默認取后面字符的全部(第二個字符串不包含在內)
~~~
[luo@LNMP-CenOS-6.5 ~]
$ echo ${PHPER:2}
llo world
~~~
### 截取PHPER變量字符串從第2個字符之后開始,取兩個字符
~~~
[luo@LNMP-CenOS-6.5 ~]
$ echo ${PHPER:2:2}
ll
~~~
### 從變量開頭刪除子字符串
~~~
[luo@LNMP-CenOS-6.5 ~]
$ echo ${PHPER#hello}
world
~~~
### 從變量最后開始匹配子字符串并刪除
~~~
[luo@LNMP-CenOS-6.5 ~]
$ echo ${PHPER%ld}
hello wor
~~~
### 從變量結尾開始刪除最長匹配子字符串
~~~
[luo@LNMP-CenOS-6.5 ~]
$ echo ${PHPER%%o world}
hell
~~~
### 使用特定字符串代替第一個匹配到的字符串
~~~
[luo@LNMP-CenOS-6.5 ~]
$ echo ${PHPER/hello/hi}
hi world
~~~
### 使用特定字符串替代從變量結尾開始匹配的子字符串
~~~
[luo@LNMP-CenOS-6.5 ~]
$ echo ${PHPER/%world/beijing}
hello beijing
~~~
### 使用特定字符串替代從變量開頭開始匹配的字符串
~~~
[luo@LNMP-CenOS-6.5 ~]
$ echo ${PHPER/#hello/hi}
hi world
~~~