You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中将命令输出传入%-操作符,移除末尾横杠并合并为单行?

合并Bash命令并移除末尾横杠的单行实现

方法1:管道结合sed完成全流程

直接在原有管道链末尾添加sed处理,把所有操作合并成单行:

MODIFIED_BRANCH_NAME=$(echo "$BRANCH_NAME" | tr '/_.' '-' | tr -s '-' | tr '[:upper:]' '[:lower:]' | sed 's/-$//')

各步骤作用:

  • tr '/_.' '-':将/、_、.统一替换为-
  • tr -s '-':把连续的多个-压缩成单个
  • tr '[:upper:]' '[:lower:]':将所有字符转为小写
  • sed 's/-$//':移除字符串末尾的单个-

测试输入abc//kdkd_kdkd_-,执行后输出abc-kdkd-kdkd,完全符合预期。


方法2:纯Bash内置操作(无外部命令)

如果想避免调用外部工具,用Bash原生的字符串参数展开也能实现,合并成单行:

MODIFIED_BRANCH_NAME=${BRANCH_NAME//[\/_.]/-}; MODIFIED_BRANCH_NAME=${MODIFIED_BRANCH_NAME//--/-}; MODIFIED_BRANCH_NAME=${MODIFIED_BRANCH_NAME,,}; MODIFIED_BRANCH_NAME=${MODIFIED_BRANCH_NAME%-}

各步骤作用:

  • ${BRANCH_NAME//[\/_.]/-}:全局替换/、_、.为-
  • ${MODIFIED_BRANCH_NAME//--/-}:全局替换连续-为单个-
  • ${MODIFIED_BRANCH_NAME,,}:将字符串转为小写(要求Bash 4.0及以上版本)
  • ${MODIFIED_BRANCH_NAME%-}:移除末尾的单个-

这种方法不需要启动子进程,执行效率更高,同样能得到预期结果。


注意事项

Bash不支持${$(command)%-}这种嵌套参数展开的写法,所以要么用分号分隔多个参数展开步骤,要么通过管道追加sed命令完成末尾横杠的移除。

内容的提问来源于stack exchange,提问作者Amin Ba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:52:54