2559

13 分钟

#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/9/10

更新于 2025/9/10