#Bash 的字符串
Bash 变量本质上都是字符串,只是在特定的上下文中尝试将这些字符串解释为其他类型(如整数、数组)。这是一种“弱类型”或“无类型”的表现。。
#转义
Bash 中使用一些字符表示特殊含义,例如:
$
- 表示读取变量的值&
- 表示将命令放在后台执行- ...
如果要表示这个特殊字符本身,则需要使用 \
进行转义。例如:
\$
表示$
\&
表示&
\\
表示\
除此之外,一些不可打印的字符也使用转义字符表示。例如:
字符 | 说明 |
---|---|
\n | 换行 |
\r | 回车 |
\t | 制表符 |
\b | 退格 |
#双引号
当文本包含空格时,就需要使用引号防止单词分割。例如:
>>> MSG="Hello World"
>>> echo $MSG
Hello World
"Hello World"
是一个字符串整体
在双引号内部,用于 生成文本 的特殊字符仍然有效。例如:
>>> echo "当前 Shell 是 $SHELL" # $SHELL 仍旧读取变量的值
当前 Shell 是 /bin/bash
双引号内部的其它特殊字符将失去效果,表示其字面含义。例如:
>>> echo "我可以用 > 或者 | 吗?" # >,|,? 都只表示文本本身,不再表示特殊字符
我可以用 > 或者 | 吗?
#单引号
单引号除了避免分割单词之外,还让所有特殊字符都失去效果,表示其字面含义。例如:
>>> echo '当前 Shell 是 $SHELL' # $ 仅表示 $ 字符本身
当前 Shell 是 $SHELL
#字符串长度
获取字符串长度的语法为:
${#变量名}
- 花括号(
{}
)是必须的,否则$#
会被视为特殊变量:当前命令的参数数量
例如:
>>> VAR="Hello World"
>>> echo ${#VAR}
11
#大小写转换
大小写转换的语法为:
# 转换为大写
${变量名^^}
# 转换为小写
${变量名,,}
例如:
>>> VAR="Hello World"
>>> echo ${VAR^^}
HELLO WORLD
>>> echo ${VAR,,}
hello world
#字符串切片
从字符串中切片子字符串的语法为:
${变量名:偏移:长度}
- 偏移 是子字符串的起始位置,从 0 开始
- 长度 是子字符串的长度;可以省略,即直到字符串末尾
例如:
例如:
>>> VAR="Hello World"
>>> echo ${VAR:0:5}
Hello
>>> echo ${VAR:3:5}
lo Wo
>>> echo ${VAR:6}
World
#搜索替换
Bash 提供字符串搜索和替换的多种方法,
#头部搜索替换
头部搜索替换的语法为:
${变量名#搜索模式} # 删除头部匹配(懒惰模式)
${变量名##搜索模式} # 删除头部匹配(贪婪模式)
${变量名/#搜索模式/替换字符串} # 用替换字符串替换头部匹配(贪婪模式)
例如:
>>> VAR="Hello World"
>>> echo ${VAR#H*o} # 删除头部最短的 H*o
World
>>> echo ${VAR##H*o} # 删除头部最长的 H*o
rld
>>> echo ${VAR/#H*o/See} # 将头部最长的 H*o 替换为 See
Seerld
#尾部搜索替换
尾部搜索替换的语法为:
${变量名%搜索模式} # 删除尾部匹配(懒惰模式)
${变量名%%搜索模式} # 删除尾部匹配(贪婪模式)
${变量名/%%搜索模式/替换字符串} # 用替换字符串替换尾部匹配(贪婪模式)
例如:
>>> VAR="Hello World"
>>> echo ${VAR%o*d} # 删除尾部最短的 H*o
Hello W
>>> echo ${VAR%%o*d} # 删除尾部最长的 H*o
Hell
>>> echo ${VAR/%o*d/Today} # 将尾部最长的 H*o 替换为 Today
HellToday
#全文搜索替换
全文搜索替换的语法为:
${变量名/搜索模式/替换字符串} # 用替换字符串替换第一个全文匹配(贪婪模式)
${变量名//搜索模式/替换字符串} # 用替换字符串替换全部全文匹配(贪婪模式)
例如:
>>> VAR="吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮。"
>>> echo ${VAR/葡萄/香蕉} # 用香蕉替换第一个葡萄
吃香蕉不吐葡萄皮,不吃葡萄倒吐葡萄皮。
>>> echo ${VAR//葡萄/香蕉} # 用香蕉替换所有葡萄
吃香蕉不吐香蕉皮,不吃香蕉倒吐香蕉皮。