Linux中替换字符串变量内容主要用Shell参数扩展,如${var/old/new}单次替换、${var//old/new}全局替换,以及${var#pattern}等模式截断,兼具高效性与安全性。

Linux 中替换字符串变量中的指定内容,主要靠 Shell 内置的参数扩展(Parameter Expansion),无需调用外部命令如 sed 或 awk,速度快、安全、不依赖子进程。
单次替换(第一个匹配)
使用 ${var/old/new}:只替换变量值中第一次出现的 old 为 new。
-
示例:
text="apple banana apple"; echo ${text/apple/orange}→ 输出orange banana apple
全局替换(所有匹配)
使用 ${var//old/new}:替换变量值中所有出现的 old。
-
示例:
text="cat dog cat bird cat"; echo ${text//cat/bird}→ 输出bird dog bird bird bird
前缀/后缀匹配替换
支持通配符模式,更灵活:
-
${var#pattern}:从开头删去最短匹配(#表示左截断) -
${var##pattern}:从开头删去最长匹配(两个#) -
${var%pattern}:从结尾删去最短匹配(%表示右截断) -
${var%%pattern}:从结尾删去最长匹配 -
实际用途:
file="/home/user/report_v2.txt"; echo ${file##*/}→ 得到report_v2.txt;echo ${file%.txt}→ 得到/home/user/report_v2
大小写与空值安全处理
替换时注意变量是否为空或未定义,可结合默认值语法增强健壮性:
-
${var:-default}:若var未设置或为空,用default -
${var:+replacement}:仅当var非空时才展开replacement - 组合使用:
path=${1:-.}; echo ${path//\//_}(将传入路径中所有/替换为_,且默认为当前目录)


















