Skip to content

字符串

学习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

相关阅读