字符串截取
str1=abcdefghabcdefi12345
echo ${str1#*b} #从左向右截取第一个b后的字符串
echo ${str1##*b} #从左向右截取最后一个b后的字符串
echo ${str1%b*}#从右向左截取第一个b后的字符串
echo ${str1%%b*}#从右向左截取最后一个b后的字符串
echo ${str1:0:1}#从左右向截取第一个字符
echo ${str1:5:-1}#截取字符串第5个到最后一个
echo ${str1#a} #截取以a开头的字符串,注意必须是开头如果字符串是b那么无效需要在字符串后加*号
echo ${str1##a}#从变量$str1的开头, 删除最长匹配$a的子串,主要是匹配正则表达式
expr index $str1'123' #获取123字符串的索引位置
echo ${str1/123/456}#将字符串str1中的123替换成456 替换一次从左到右
echo ${str1//a/f} #将所有的a替换成f
echo ${str1/#abc/f}#将str1中以abc开头的替换成f
echo ${str1/%5/f}#将str1中以5结尾的替换成f
判断读取字符串值
${var} #变量var的值, 与$var相同
${var-DEFAULT} #如果var没有被声明, 那么就以$DEFAULT作为其值
${var:-DEFAULT}#如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值
${var=DEFAULT} #如果var没有被声明, 那么就以$DEFAULT作为其值
${var:=DEFAULT}#如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值
${var+OTHER}#如果var声明了, 那么其值就是$OTHER, 否则就为null字符串
${var:+OTHER}#如果var被设置了, 那么其值就是$OTHER, 否则就为null字符串
比较
[[ "a.txt" == a* ]] # 逻辑真 (pattern matching)
[[ "a.txt" =~ .*\.txt ]] # 逻辑真 (regex matching)
[[ "abc" == "abc" ]] # 逻辑真 (string comparision)
[[ "11" < "2" ]] # 逻辑真 (string comparision), 按ascii值比较
连接
s1="hello"
s2="world"
echo ${s1}${s2} # 当然这样写 $s1$s2 也行,但最好加上大括号
本文详细介绍Shell脚本中字符串的各种操作技巧,包括截取、替换、判断等,并提供实用示例帮助理解。
1523

被折叠的 条评论
为什么被折叠?



