Shell字符串

单引号

str="this is a string"

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。
  • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号

name="yanfadi"
str="Hello, Wellcome to \"$name\"! \n"

双引号的优点:

  • 双引号里可以有变量。
  • 双引号里可以出现转义字符。

拼接字符串

#!/bin/bash

name="yanfadi"
y1="hello, $name!"
y2="wellcome to ${name}!"
echo $y1 $y2

脚本运行结果:

hello, yanfadi! wellcome to yanfadi!

说明:
Shell中连接字符串不需要PHP中的点号(.)和Java中的加号(+),直接挨着书写变量即可。

获取字符串长度

shell中获取字符串变量的长度:${#string}

#!/bin/bash

echo ${#string}   //7
echo `expr length $string`   //7
echo `expr "$string" : ".*"`   //7 分号两边要有空格,这里的:跟的用法差不多

截取字符串

shell中截取字符串使用:${string:start:len}

#!/bin/bash

string="yanfadi"
echo ${string:4}      //adi  从第4位开始截取后面所有字符串
echo ${string:3:3}    //fad      从第3位开始截取后面3位
echo ${string:1:6}    //anfadi   从第1位开始截取后面6位
echo ${string: -4}    //fadi 左边有空格 截取后4位
echo ${string:(-4)}   //fadi  左边有空格 截取后4位
echo `expr substr $string 3 3`   //naf  从第3位开始截取后面3位

查找字符串

使用格式:

expr index $string $substring

在字符串$string中所匹配到的$substring第一次所出现的位置。

#!/bin/bash

string="wellcome to yanfadi!"
echo `expr index "$string" e` //2

说明:

  • 下标从1开始
  • 返回值为#substring中任意字符最先出现的位置。
  • 如果是echo expr index "$string" to 输出结果则为6,因为o字符处于第6个位置。

正则匹配显示内容

#!/bin/bash

string="yanfadi1234"
echo `expr match $string '\([a-z]*[0-9]*\)'`   //yanfadi1234
echo `expr match $string '\([a-z]*[0-9]\)'`   //yanfadi1
echo `expr match $string '.*\([0-9][0-9][0-9]\)'`   //234

匹配并替换

#!/bin/bash

string="yanfadi1234"

echo ${string/23/bb}     //yanfadi1bb4  替换一次
echo ${string//23/bb}     //yanfadi1bb4  双斜杠替换所有匹配
echo ${string/#yan/bb}   //bbfadi1234  #以什么开头来匹配
echo ${string/%34/bb}    //yanfadi12bb     %以什么结尾来匹配