如何在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
相关产品推荐
相关产品推荐

