Shell系列(3) - shell字符串

148 阅读2分钟

「4月日新计划更文活动」

字符串使用

''单引号使用

使用注意事项

  • 单引号里的任何字符串都会原样输出,单引号字符串中的变量是无效的
  • 字符串中不能出现单独的一个的单引号,即使使用转移也不行,但是成对出现,作为字符串拼接使用可以
str='I know you'

""双引号使用

使用注意事项:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
str1="$name"
str2=""$name"\n"

拼接字符串

  • 如果被双引号包围,那么中间可以有空格
  • 当字符串不被任何一种引号包围时,遇到空格就认为字符串结束,所以单独使用两个字符串时,中间不能有空格
#单引号拼接
value1='hello, '$name'!'
value2='hello, ${name}!' #输出:hello,${name}!
echo $value1
echo $value2

#双引号拼接
value1="hello, "$name"!"
value2="hello, ${name}!"
echo $value1
echo $value2

获取字符串长度

  • ${#string_name} ,其中string_name表示字符串名字****
  • 当变量为数组时, ${# string_name } == ${# string_name [0]}
key="abcde"

echo ${#key}     #方法一
echo ${#key[0]}   #方法二

字符串截取

从左开始计数

  • 语句格式 ${string: start :length}
  • 从字符串左边开始计数: ${string:从左开始,从0开始计数:需要截取的长度}
    • 注意:第一个字符的索引值为0
key="my name  is seven"
echo ${key:1:4}   #截取字符串第2个字符开始到第4个字符

从右开始计数

  • 从字符串右边开始计数 ${string: 0-start :length}
    • 注意
      • 从右边开始计数时,起始数字是1,
      • 0-是固定写法,专用于从字符串右边开始计数
      • 无论是从那一边开始计数,截取方向都是从左到右 计数只是截取开始位置,不改变截取方向
key="my name  is seven"
echo ${key:0-7:4}   #截取字符串右边开始

从指定字符串开始截取

  • 可以截取指定字符右边的所有字符,也可以截取左边的所有字符

使用#号截取右边字符

  • 匹配左边的字符 ,保留右边字符,读取方向 -- 》
  • 语句格式${string#*chars}
    • string :表示截取的字符
    • chars:表示指定的字符
    • *:通配符,表示任意长度的字符串
    • *chars :忽略左边的所有字符,知道遇见chars(不截取chars)
  • 注意#截取遇到第一个匹配的字符就结束了
url="www.baidu.com"
echo ${url#*.}

  • 如果需要匹配到最后一个指定字符在结束的话,可以使用##
  • 语句格式${string##*chars}
url="www.baidu.com"
echo ${url##*.}

使用%截取左边字符串

  • 匹配右边的字符,保留左边字符,读取方向 《 --
  • 语句格式${string%chars*}
  • 注意:需要注意*位置,因为截取反向发生变化,所有忽略了chars右边的字符,所有需要更改*的位置
url="www.baidu.com"
echo ${url%.*}