国际访客建议访问 Primers 编程伙伴 国际版站点 > Bash 教程 > 字符串 以获得更好的体验。

# 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//葡萄/香蕉}      # 用香蕉替换所有葡萄
吃香蕉不吐香蕉皮,不吃香蕉倒吐香蕉皮。
本文 更新于: 2025-11-27 09:38:13 创建于: 2025-11-27 09:38:13