用shell脚本自动发送git commit -m “xxx“命令时,注释中有空格会报错的解决方法

问题现象

我们希望用shell脚本实现自动发送
git commit -m “line1
line2
line3
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代码,可读性和美观性都较差。

后续如果我发现了更好的解决方法,会再回来更新在这里;也希望大家如果有更好的解决办法,可以不吝赐教呀~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值