如何将Bash中Git Diff输出变量转为逗号分隔字符串?
解决Bash变量换行转逗号分隔字符串的问题
你的问题出在没有保留变量里的换行符:echo $var会让Bash把变量中的换行替换成空格,所以你用sed替换空格自然不对。下面是几种可行的解决办法:
直接处理Git输出(推荐)
不用先把结果存到变量里,直接通过管道处理:
- 用
tr命令替换换行为逗号,再去掉末尾多余的逗号:git diff @ @~1 --name-only | tr '\n' ',' | sed 's/,$//' - 更简洁的
paste命令,自动生成无末尾逗号的结果:git diff @ @~1 --name-only | paste -sd ',' -
处理已存储的变量
如果已经把Git输出存到了变量var里,要记得用双引号包裹变量来保留换行:
- 用
tr配合sed处理:echo "$var" | tr '\n' ',' | sed 's/,$//' - 用sed一次性替换所有换行:
echo "$var" | sed ':a;N;$!ba;s/\n/,/g'
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

