shell ${}

${...}在字符串中有非常多的用法:

1、${var}

限定变量。

如果一个变量名A是另一个变量名AB的前部分,那么,如果要在AB相连时,要得到A的值,就必须使用${var}限定。

如果变量名不会产生歧义时(即独立的变量名),${var}与$var没有任何区别。

var="hello"

var_01="hello01"

echo  $var $var_01 ${var}_01

>>> hello hello01 hello_01

2、${#var}

得到变量var的长度

var="hello"

echo ${#var}

>>> 5

3、${var#}

删除变量首部的字符(串),

"#"后面的可以是字面串,也可以是正则表达式(惰性匹配)。

var="hello"

echo ${var#he}

>>> llo

var="/res_pos/path/from/something"

echo ${var#/}

>>> res_pos/path/from/something    # 删除第一个"/"

echo ${var#/*/}

>>> path/from/something   # 删除首部匹配"/*/"的串,即"/res_pos/"

echo ${var#res}

>>> /res_pos/path/from/something   # res不在首部,则不删除

4、${var##}

删除变量首部的字符(串),

只是,当使用2个"##"时,匹配是贪婪的(贪婪匹配,也就是尽可能多的匹配)。

echo ${var##/*/}

>>> something  # 删除首部匹配"/*/"的串,即"/res_pos/path/from/"。

5、${var%}

删除变量尾部的字符(串),

"%"后面的可以是字面串,也可以是正则表达式(惰性匹配)。

var="hello"

echo ${var%llo}

>>> he

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~/res_pos/path/from    # 删除尾部的"/something"

6、${var%%}

删除变量尾部的字符(串),

只是,当使用2个"%%"时,匹配是贪婪的(对应于第4条)

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~    # 删除第一个的"/"后的所有所有内容(包括"/"),贪婪匹配中,"/*"就是"/"后的所有字符串

7、${var::}

跟python的切片概念相似,取变量var的起始索引,

指定长度的子串(${var:索引:长度})。

var="~/res_pos/path/from/something"

echo ${var:0:5}

>>> ~/res

echo ${var:1:5}

>>> /res_      # 可见,字符串的索引是从0开始的

echo ${var::5}

>>> ~/res      # 省略"索引",默认为从0开始

echo ${var:1:}

>>>  /res_pos/path/from/something             # 省略"长度",默认长度为全部

8、${var//}

字符串替换。

将var中的字符串A替换成字符串B(${var/A/B})。

var="hello world"

echo ${var/hello/hi}

>>> hi world      # 字符串"hello"替换成了"hi"

echo ${var/l/X}

>>> heXlo world  # 第一个"l"替换成了"X"

9、${var///}

字符串替换,

与第8点相同,只不过,现在是将所有出现的串A替换成串B(${var//A/B})。

var="hello world"

echo ${var//l/X}

>>> heXXo worXd  # 所有的"l"都替换成了"X"


10、${var/#/}

替换字符串首部的串A为串B,

(${var/#A/B}),与第8点不同的是,这里只替换首部的串A。

var="hello world. hello baby."

echo ${var//h/H}

>>> Hello world. Hello baby.    # 将所有"h"替换成了"H"

echo ${var/#h/H}

>>> Hello world. hello baby.    # 将首部的"h"替换成了"H"

echo ${var/e/E}

>>> hEllo world. hello baby.    # 将第一个出现的"e"替换成了"E"

echo ${var/#e/E}

>>> hello world. hello baby.    # 首字符不是"e",所以没有进行任何替换,原样输出。

11、${var/%/}

替换字符串尾部的串A为串B,

(${var/%A/B}),与第10点相似,只是这是处理的是字符串尾。

var="hello hello"

echo ${var/%o/END}

>>> hello hellEND    # 将尾部的字符"o",替换成了"END"。
————————————————
版权声明:本文为CSDN博主「李老客儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lihonghai2392/article/details/77868445

猜你喜欢

转载自www.cnblogs.com/yangxinrui/p/12703765.html