字符串的声明
shell中的字符串可以用单引号,也可以用双引号,也可以不用引号
单引号
1 | str='this is a string' |
单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号
1 | str="this is a string" |
双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符
获取字符串的长度
1 | string="abcd" |
提取子字符串
语法 | 说明 |
---|---|
${string:position} | 从position位置开始 |
${string:position:length} | 从position位置开始,匹配长度为length |
${string:-position} | 从右边开始匹配 |
${string:(position)} | 从左边开始匹配 |
expr substr $string $position $length | 从position位置开始,匹配长度为length |
以下脚本将输出string 从第12位开始,5位长度的内容
1 | string="Stopping by Woods on a Snowy Evening, Whose woods these are I think I know." |
查找字符串
查找字符i或o的位置(哪个字母先出现就计算哪个):
1 | string="Stopping by Woods on a Snowy Evening, Whose woods these are I think I know." |
注意: 以上脚本 `是反引号
字符串的替换
语法 | 说明 |
---|---|
${变量名#匹配规则} | 从变量开头进行规则匹配,将符合最短的数据删除 |
${变量名##匹配规则 | 从变量开头进行规则匹配,将符合最长的数据删除 |
${变量名%匹配规则} | 从变量尾部进行规则匹配,将符合最短的数据删除 |
${变量名%%匹配规则} | 从变量尾部进行规则匹配,将符合最长的数据删除 |
${变量名/旧字符串/新字符串} | 变量内容符合旧字符串,则第一个旧字符串会被新字符串取代 |
${变量名//旧字符串/新字符串} | 变量内容符合旧字符串,则全部的旧字符串会被新字符串取代 |
字符串的测试
变量测试
变量测试表达式可以在变量为空或没有配置时返回特定的表达式,具体操作如下:
变量配置方式 | str没有配置 | Str为空字符串 | Str已配置且非空 |
---|---|---|---|
var=${str-expr} | var=expr | var= | var=$str |
var=${str=expr} | var=expr | var= | var=$str |
var=${str:-expr} | var=expr | var=expr | var=$str |
var=${str:=expr | var=expr | var=expr | var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var=${str:+expr} | var= | var= | var=expr |
表达式的命令替换
表达式如 expr 会将结果输出到控制台,如果希望作为值,需要使用命令替换语句。语法为:
1 | `expr` |
测试脚本
1 | !bin/bash |
测试结果:
1 | Two roads diverged in a yellow wood, |