Shell单行字符串操作:分号分隔邮箱列表转目标格式实现
Shell单行字符串转换实现
原生Bash单行方案(无需外部命令)
不需要分步定义中间变量,直接通过嵌套参数扩展即可一次完成全流程转换,适配Bash 4.0及以上版本:
echo "r=${${list%;}//@gmail.com;/r=}"
逻辑拆解
- 第一步处理原变量:通过
${list%;}直接移除变量末尾多余的分号,从根源上避免生成冗余的,r=后缀 - 第二步全局替换:把处理后字符串里所有的
@gmail.com;片段替换为,r= - 第三步拼接前缀:在最终结果前补上固定开头
r=,直接输出目标格式
输入原list值kmakalas@gmail.com;kmakalas@gmail.com;kmakalas@gmail.com;时,命令直接输出r=kmakalas,r=kmakalas,r=kmakalas,和需求完全匹配。
旧版Bash兼容方案
如果环境内的Bash版本过低、不支持嵌套参数扩展,可搭配sed实现无中间变量的单行转换:
echo "r=${list//@gmail.com;/r=}" | sed 's/,r=$//'
这个方案保留了原有的替换逻辑,通过管道直接截断末尾多余的,r=片段,全程没有分步赋值中间变量的操作。
内容的提问来源于stack exchange,提问作者helen
相关产品推荐
相关产品推荐

