Shell中只有数字和字符串类型,所以字符串是经常使用的数据类型。
字符串可以由单引号 ‘
’
或者 "
"
包围,也可以不被包围。
# 字符串举例
STR=com.baidu.www
STR="com.baidu.www"
STR='com.baidu.www'
这三种形式的区别如下:
-
‘
单引号包围
- 被包围的字符串都是字面量,被包围的变量无法取值。
- 字符串中不能包含
'
,即使对其转义也无效。
-
"
双引号包围
- 被包围的字符串会被正确解析,被包围的变量可以取值。
- 字符串可以包含双引号,但是需要转义。
- 没有被包围
- 没有包围的变量可以取值,如果变量为空解析结果也是空。
- 字符串不能出现空格,空格会被认为是字符串截止。
字符串拼接
在shell中不需要使用符号拼接字符串,将做个字符串放在一起就能实现拼接。
FILENAME=text.txt
PATH=${HOME}/Desktop/${FILENAME}
# 字符串中间不能有空格
echo $FILENAME$PATH
# 字符串中间可以有空格
echo "$FILE $NAME"
# 变量名外面的花括号{ }是可选的,是为了帮助解释器识别变量边界
echo "${FILE}${NAME}"
# 字符串中间夹着别的字符串
echo $FILENAME" "$PATH
获取字符串长度
#! /bin/bash
STR=com.baidu.www
echo ${#STR}
多样式字符串
echo可以输出彩色、粗体等样式字符串,在某些场景下会增加输出易读性。通过 转义序列(escape sequences) 使得在命令行中可以输出彩色与格式化的字符,这些字符需要被转义符包围(通常由[
表示)。
在Bash中Esc字符通常可以表示为
- \e
- \033
- \x1B
举个🌰:
-
echo -e "\e[31mHello World\e[0m"
-
echo -e "\033[31mHello\e[0m World"
![](https://img.haomeiwen.com/i8092146/6c96300616143c61.png)
简单解释一下语法
-
\033[43;36
是一个整体,43
表示背景颜色,36
表示字符串颜色 -
-\033
表示转义的开始,\033
本身代买Esc符号可以用\e
或\E
替换 - 背景色与字符串颜色各由一个数字表示,并且他们的数值空间不一样
-
m
表示专业终止符 -
\033[0m
表示将颜色恢复为原来的样式
[图片上传中...(image-c88bf8-1586186516142)]
![](https://img.haomeiwen.com/i8092146/dd22519b01aafa9e.png)
![](https://img.haomeiwen.com/i8092146/94bcfa2482d175c1.png)
获取字符串对比
=~:正则匹配,用来判断其左侧的参数是否符合右边的要求
#!/bin/bash
#条件表达式
declare A
#判断变量A是否set
[[ -v A ]] && echo "var A is set" || echo "var A is unset"
#判断变量A的值是否为空
[ ! $A ] && echo false || echo true
test -z $A && echo "var A is empty"
#通配与正则
A="1234567890abcdeABCDE"
B='[0-9]*'
C='[0-9]{10}\w+'
[[ $A = $B ]] && echo '变量A匹配通配符[0-9]*' || echo '变量A不匹配通配符[0-9]*'
[ $A == $B ] && echo '[ expr ]中能够使用通配符' || echo '[ expr ]中不能使用通配符'
[[ $A =~ $C ]] && echo '变量A匹配正则[0-9]{10}\w+' || echo '变量A不匹配正则[0-9]{10}\w+'
reference
Bash tips: Colors and formatting (ANSI/VT100 Control sequences)
网友评论