字符串
学习shell
字符串的语法以及用法
语法
可使用单引号或双引号表示字符串,两种表示方式之间有差异
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用
- 双引号里可以有变量
- 双引号里可以出现转义字符
获取字符串长度
使用符号${#}
获取字符串长度,操作如下:
$ cat test.sh
#!/bin/bash
VAR="asdfadfa"
echo ${#VAR}
结果如下:
$ bash test.sh
8
判断字符串是否以某些字符开头
[[ ${STR} == h* ]]
使用双中括号
和等于号
表示字符串STR
是否以h
开头。注意
h*
不需要使用引号括起来,使用引号括起来是直接做相等比较- 比较语句使用双中括号括起来,而不是使用单中括号
也可以使用正则比较方式,将==
改为=~
即可
[[ "$str" =~ ^he.* ]]
he*
:不要使用he*
,这里的*
号表示e
字符0
到多个,即h
,以及heeee
都可测试通过he.*
:表示字符串是否包含he
^he.*
:表示字符串是否以he
开头
判断字符串是否为空
使用双中括号和参数-z
或-n
$ cat test.sh
#!/bin/bash
if [[ -z ${1} ]]
then
echo "第一个参数为空字符串"
fi
if [[ -n ${2} ]]
then
echo "第二个参数不是空字符串"
fi
执行结果如下:
$ bash test.sh "" "adfa"
第一个参数为空字符串
第二个参数不是空字符串
删除字符串
${var#*//}
#
是运算符,var
是变量,*//
表示删除从左往后第一个//
及之前字符
${var##*//}
##
是运算符,表示删除从左往后最后一个//
及之前字符
${var%/*}
%
是运算符,表示删除从右往左第一个/
及之前字符
${var%%/*}
%%
是运算符,表示删除从右往左最后一个/
及之前字符
提取字符串
语法如下:
${string:begin[:num]}
string
是字符串变量,:begin
是起始下标(以0开始),:num
是字符个数,如果为空,表示其后所有字符
$ cat test.sh
#!/bin/bash
var="/home/zj/hahahaha"
# 截取/zj/hahahaha
echo "${var:5}"
# 截取/home/zj
echo "${var:0:9}"
# 截取zj
echo "${var:6:2}"
执行结果:
$ bash test.sh
/zj/hahahaha
/home/zj/
zj