大小写转化
# 把变量中的第一个字符换成大写
${test^}
# 把变量中的所有小写字母,全部替换为大写
${test^^}
# 把变量中的第一个字符换成小写
${test,}
# 把变量中的所有大写字母,全部替换为小写
${test,,}
示例
#!/bin/bash
# script file name is test.sh
test="abcDEF"
echo "test^=${test^}"
echo "test^^=${test^^}"
echo "test,=${test,}"
echo "test,,=${test,,}"
获取字符串长度
${#string}
替换
整体替换
# 若变量var为空,则用string来替换此处的值,最常用。
${var:-string}
# 若变量var为空,则用string来替换此处的值,把string赋给变量var。
${var:=string}
# 若变量var不为空,则用string来替换此处的值。
${var:+string}
# 若变量var不为空,则用string来替换此处的值;
# 若变量var为空,则把string输出到标准错误中,并从脚本中退出。
# 常用利用此特性来检查是否设置了变量的值。
${var:?string}
部分替换
# 只替换第1个子串
${var/old/new}
# 替换全部子串
${var//old/new}
截取
# 从string字符串的左边第start个字符开始(不包含第start个字符),向右截取到最后,start从0开始;
${string:start}
# 从string字符串的左边第start个字符开始(不包含第start个字符),向右截取length个字符;
${string:start:length}
# 从string字符串的右边第start个字符开始(包含第start个字符),向右截取到最后,start从1开始;
${string:0-start}
# 从string字符串的右边第start个字符开始(包含第start个字符),向右截取length个字符,start从1开始;
${string:0-start:length}
# 从string字符串左边第一次出现*chars的位置开始,截取*chars右边的所有字符,不包含chars;
${string#*chars}
# 从string字符串左边最后一次出现*chars的位置开始,截取*chars右边的所有字符,不包含chars;
${string##*chars}
# 从string字符串右边第一次出现chars*的位置开始,截取chars*左边的所有字符,不包含chars;
${string%chars*}
# 从string字符串右边最后一次出现chars*的位置开始,截取chars*左边的所有字符,不包含chars;
${string%%*chars*}
示例
#!/bin/bash
# script file name is test.sh
url="https://blog.csdn.net/monarch91"
echo "url=${url}"
echo "url:8=${url:8}"
echo "url:8:4=${url:8:4}"
echo "url:0-8=${url:0-8}"
echo "url:0-8:4=${url:0-8:4}"
echo "url#*c=${url#*c}"
echo "url##*c=${url##*c}"
echo "url%c*=${url%c*}"
echo "url%%c*=${url%%c*}"
补充
当然,除了以上操作,Shell还有许多字符串操作,下面小编为大家整理了一些,需要的可以参考一下
字符串的拼接
str1=www
str2=bilibili
string1=$str1$str2 #中间不加别的,直接放一起
string2="$str1 $str2" #双引号括住,中间可加任意字串
string3=$str1"..."$str2 #整体不加引号,若中间要出现别的字串需前后紧挨,且字串双引号括住
string4="${str1}.${str2}.com" #也可以使用${}方式引用变量
echo $string1
echo $string2
echo $string3
echo $string4
运行结果:
wwwbilibili
www bilibili
www…bilibili
www.bilibili.com
读取字符串
$ echo ${abc-'ok'}
ok
$ echo $abc
$ echo ${abc='ok'}
ok
$ echo $abc
ok
$ var1=11;var2=12;var3=
$ echo ${!v@}
var1 var2 var
$ echo ${!v*}
var1 var2 var3
#${!varprefix*}
与${!varprefix@}
相似,可以通过变量名前缀字符,搜索已经定义的变量,无论是否为空值。
字符串比较
[[ "a.txt" == a* ]] #逻辑真(pattern matching)
[[ "a.txt" =~ .*.txt ]] #逻辑真(regex matching)
[[ "abc" == "abc" ]] #逻辑真(string comparision)
[[ "11" < "2" ]] #逻辑真(string comparision),按 ascii 值比较
到此这篇关于Shell实现字符串处理的方法详解的文章就介绍到这了,更多相关Shell字符串处理内容请搜索aitechtogether.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持aitechtogether.com!