Bash是否支持一次性对变量执行多字符串替换?
Bash 一次性完成多字符串变量替换的方法
当然可以!Bash 完全支持在单条命令里完成多次字符串替换,不用拆分三条赋值语句。这里有两种常用的实用方法:
方法1:嵌套参数展开(Bash内置,推荐)
利用Bash的参数展开嵌套特性,把多次替换逻辑整合到同一个赋值语句里:
V="AAAAAAA/XXXXXXX/BBBBBB/YYYYY/CCCCCC/ZZZZZZZ" V=${${${V//XXXXXXX/string1}//YYYYY/string2}//ZZZZZZZ/string3} echo "$V"
执行后会直接输出:AAAAAAA/string1/BBBBBB/string2/CCCCCC/string3
这个逻辑是从最内层的替换开始执行:先把V里的XXXXXXX替换成string1,接着把中间结果里的YYYYY替换成string2,最后再替换ZZZZZZZ为string3。全程都是Bash内置操作,不需要调用外部工具,速度更快,也更轻量化。
方法2:使用sed命令(依赖外部工具)
如果你习惯用文本处理工具,也可以通过sed的多表达式参数一次性完成替换:
V="AAAAAAA/XXXXXXX/BBBBBB/YYYYY/CCCCCC/ZZZZZZZ" V=$(echo "$V" | sed -e 's/XXXXXXX/string1/g' -e 's/YYYYY/string2/g' -e 's/ZZZZZZZ/string3/g') echo "$V"
这里的-e参数可以指定多条替换规则,sed会按顺序执行每一条。不过这种方式需要启动子进程,对于简单的变量替换场景,不如内置参数展开高效。
两种方法都能达到你想要的效果,根据自己的使用习惯选择就好~
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

