1. 字符串切片
1.1. 字符串切片
格式 | 說明 |
---|---|
${#var} | 返回字符串變量var的長度(字符)。 |
${var:offset} | 返回字符串變量var中從第offset個字符后面(不包括第offset個字符)的字符開始,到最后的部分。 注意:offset 的取值在0 到 ${#var}-1 之間(bash4.2后,允許為負值)。 |
${var:offset:number} | 返回字符串變量var中從第offset個字符后面(不包括第offset個字符)的字符開始,長度為number的部分。 |
${var: -length} | 取字符串的最右側幾個字符。 注意:冒號后必須有一空白字符。 |
${var:offset: -length} | 從最左側跳過offset字符,一直向右取到距離最右側lengh個字符之前的內容。 |
${var: -length:-offset} | 先從最右側向左取到length個字符開始,再向右取到距離最右側offset個字符之間的內容。 注意:-length前空格。 |
${#var}
|<----------- string length ----------->|
|---------------string------------------|
${var:offset}
offset + 1
|---------- cut ---------|
|---------------string------------------|
|<-- offset -->|
${var:offset:number}
offset + 1 offset + number
|----- cut ----|
|---------------string------------------|
|<-- offset -->|<-- number -->|
${var: -length}
${#var} - length ${#var}
|----- cut -----|
|---------------string------------------|
|<-- -length -->|
${var:offset: -length}
offset + 1 ${#var} - length
|- cut --|
|---------------string------------------|
|<-- offset -->| |<-- -length -->|
${var: -length:-offset}
${#var} - length + 1 ${#var} - offset
|----- cut -----|
|---------------string------------------|
|<---------- -length ---------->|
|<-- -offset -->|
1.2. 基於模式取子串
格式 | 說明 |
---|---|
${var#*word} | 功能:自左而右,查找var變量所存儲的字符串中,第一次出現的word,刪除字符串開頭至第一次出現word字符串(含)之間的所有字符。 其中word可以是指定的任意字符。 |
${var##*word} | 貪婪模式;不同的是,刪除的是字符串開頭至最后一次由word指定的字符之間的所有內容。 |
示例
file="var/log/messages"
[root@centos7 ~]# echo ${file#*/}
log/messages
[root@centos7 ~]# echo ${file##*/}
messages
格式 | 說明 |
---|---|
${var%word*} | 功能:自右而左,查找var變量所存儲的字符串中,第一次出現的word,刪除字符串最后一個字符向左至第一次出現word字符串(含)之間的所有字符。 其中word可以是指定的任意字符。 |
${var%%word*} | 貪婪模式;只不過刪除字符串最右側的字符向左至最后一次出現word字符之間的所有字符。 |
示例
file="/var/log/messages"
[root@centos7 ~]# ${file%/*}
/var/log
url=http://www.centos.com:80
[root@centos7 ~]# ${url##*:}
80
[root@centos7 ~]# ${url%%:*}
http
1.3. 查找替換
替換 | 說明 |
---|---|
${var/pattern/substr} | 首次。查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替換之。 |
${var//pattern/substr} | 全部。查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替換之。 |
${var/#pattern/substr} | 行首。查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替換之。 |
${var/%pattern/substr} | 行尾。查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替換之。 |
1.4. 查找並刪除
刪除 | 說明 |
---|---|
${var/pattern} | 刪除首次。刪除var表示的字符串中第一次被pattern匹配到的字符串。 |
${var//pattern} | 刪除全部。刪除var表示的字符串中所有被pattern匹配到的字符串。 |
${var/#pattern} | 刪除行首。刪除var表示的字符串中所有以pattern為行首匹配到的字符串。 |
${var/%pattern} | 刪除行尾。刪除var所表示的字符串中所有以pattern為行尾所匹配到的字符串。 |
1.5. 字符大小寫轉換
大小寫 | 說明 |
---|---|
${var^^} | 把var中的所有小寫字母轉換為大寫。 |
${var,,} | 把var中的所有大寫字母轉換為小寫。 |
1.6. 變量賦值
變量set方式 | str沒有被set | str為空 | str為非空字符串 | 描述 |
---|---|---|---|---|
${str-expr} | expr | null | $str | |
${str:-expr} | expr | expr | $str | |
${str+expr} | null | expr | expr | |
${str:+expr} | null | null | expr | |
${str=expr} | expr str=expr |
null | $str | |
${str:=expr} | expr str=expr |
expr str=expr |
$str | 類似“-”,但str會被賦值 |
${str?expr} | expr output stderr | null | $str | |
${str:?expr} | expr output stderr | expr output stderr | $str |