⽤shell脚本⾃动发送gitcommit-m“xxx“命令时,注释中有空格会报错的解决⽅法问题现象
我们希望⽤shell脚本实现⾃动发送
git commit -m “line1
line2
line3
shell代码new line4”
命令的功能,shell脚本的代码如下:
#!/bin/bash
LINE1="line1"
LINE2="line2"
LINE3="line3"
LINE4="new line4"
git add.
git commit -m ${LINE1}$'\n'${LINE2}$'\n'${LINE3}$'\n'${LINE4}
但是实际运⾏中发现,commit信息中如果有空格存在(如上⾯的"new line4"),脚本运⾏会报错。下⾯是脚本运⾏的预期结果和实际出错的结果:
预期结果如下:
实际运⾏代码时,会报错如下:
error: pathspec ‘line4’ did not match any file(s) known to git.
问题分析
出现这个问题,可能是因为在shell脚本看来,此时要发送的命令是:
git commit -m …line3\nnew line4
此时,字符串"line4"被识别成了⼀个新的选项,并且是⽆法识别的选项,所以会报如上的错误。并且,我尝试在${LINE1}前⾯和${LINE4}后⾯加了双引号" \" ",也没有解决这个问题。
注:\n是因为使⽤了多⾏,⽤它来换⾏的。
解决⽅法
可以使⽤字符串拼接和转义字符,将LINE4改写成如下格式规避:
git commit -m ${LINE1}$'\n'${LINE2}$'\n'${LINE3}$'\n'"new"\ "line4"
上⾯的代码使⽤"\ "对空格进⾏了转义处理,让git commit认为空格也是字符串的⼀部分,从⽽避免把"line4"识别成⼀个选项,也就不会报刚才的错误了。
该⽅法的不⾜
1. 这个⽅法虽然能暂时规避这个问题,但是只适⽤于空格较少的情况。如果要提交的commit信息中空格较多,⽤这种⽅法肯定⽐较繁
琐。
2. ⽤这种⽅法写出来的shell代码,可读性和美观性都较差。
后续如果我发现了更好的解决⽅法,会再回来更新在这⾥;也希望⼤家如果有更好的解决办法,可以不吝赐教呀~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。