为什么用${}引用变量,${}还有一个重要的功能,就是文本处理,单行文本基本上可以满足你所有需求。
获取字符串长度
~]# danyu=123456abc
~]# echo $danyu
123456abc
~]# echo ${#danyu}
9
~]#
字符串切片
格式:
${parameter:offset}
${parameter:offset:length}
截取从 offset 个字符开始,向后 length 个字符。
~]# danyu=123456abc
截取第一个字符开始,向后截取4个字符
~]# echo ${danyu:0:4}
1234
~]# echo ${danyu:3:7}
456abc
~]#
从字符位置7开始,向后截取
~]# echo ${danyu:7}
bc
~]#
截取最后一个字符
~]# echo ${danyu:(-1)}
c
~]#
截取最后两个字符
~]# echo ${danyu:(-2)}
bc
~]#
截取最后五个字符中的前三个,也就是56abc中的56a
~]# echo ${danyu:(-5):3}
56a
~]#
字符截取,第一个位置的字符用0表示,后面的类推,举例如下:
字符: 12345abc
位置表示: 01234567
替换字符串
格式:${parameter/pattern/string}
~]# danyu=abc12345abc
将ABC替换为hello
~]# echo ${danyu/abc/hello}
hello12345abc
将所有的ABC替换为hello
~]# echo ${danyu//abc/hello}
hello12345hello
也可以使用正则匹配
~]# echo ${danyu/[0-9]/a}
abca2345abc
~]# echo ${danyu//[0-9]/a}
abcaaaaaabc
patterm 前面开头一个正斜杠为只匹配第一个字符串,两个正斜杠为匹配所有字符。
字符串截取
格式:
${parameter#word} # 删除匹配前缀
${parameter##word}
${parameter%word} # 删除匹配后缀
${parameter%%word}
# 去掉左边,最短匹配模式,##最长匹配模式。
% 去掉右边,最短匹配模式,%%最长匹配模式
~]# url="http://www.danyu.com/test/index.html"
以//为分隔符截取右边字符串
~]# echo ${url#*//}
www.danyu.com/test/index.html
以/为分隔符截取右边字符串
~]# echo ${url##*/}
index.html
以//为分隔符截取左边字符串
~]# echo ${url%//*}
http:
以/为分隔符截取左边字符串
~]# echo ${url%/*}
http://www.danyu.com/test
以.为分隔符截取左边
~]# echo ${url%.*}
http://www.danyu.com/test/index
以.为分隔符截取右边
~]# echo ${url##*.}
html
变量状态赋值
${VAR:-string} 如果 VAR 变量为空则返回 string
${VAR:+string} 如果 VAR 变量不为空则返回 string
${VAR:=string} 如果 VAR 变量为空则重新赋值 VAR 变量值为 string
${VAR:?string} 如果 VAR 变量为空则将 string 输出到 stderr
如果变量为空就返回 hello world!
~]# danyu=
~]# echo ${danyu:-'hello world!'}
hello world!
如果变量不为空就返回 hello world!:
~]# danyu="hello"
~]# echo ${danyu:+'hello world!'}
hello world!
如果变量为空就重新赋值
~]# danyu=
~]# echo ${danyu:=hello}
hello
~]# echo $danyu
hello
如果变量为空就将信息输出 stderr
~]# danyu=
~]# echo ${danyu:?value is null}
-bash: danyu: value is null
字符串颜色
格式:
\033[1;31;40m # 1 是显示方式,可选。31 是字体颜色。40m 是字体背景颜色。
\033[0m # 恢复终端默认颜色,即取消颜色设置。
输入更醒目
示例
~]# echo $[$RANDOM%50] ##生成 0 - 49 之间随机数
~]# echo -e "\033[1;$[RANDOM%7+31]mhello\033[0m"
留言与评论(共有 0 条评论) “” |