Bash 脚本读取带有空格的字符串

Bash 脚本读取带有空格的字符串

我正在尝试编写一个快速 bash 脚本,以便自动将 git push 一次推送到多个分支。我的问题是,当我将提交消息作为读取变量输入时,bash 和 git 会因使用空格而发疯。

这是我当前的脚本:

    #!/bin/bash
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "Pushing To all branches"
echo "What is your Commit Message?"
read message

git add *
git commit -m \"$message\"
git push origin
.... (push to other branches) ...

echo "Done!"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

如果我的提交消息只有一个词,那么这将非常有效。然而,情况往往并非如此。例如,如果我输入:

Testing test case

作为我的提交消息,我会收到以下错误:

error: pathspec 'test"' did not match any file(s) known to git.
error: pathspec 'case"' did not match any file(s) known to git.

有谁知道如何解决这个问题,以便我的 bash 脚本可以处理空格?

非常感谢!

答案1

您的主要问题是git commit -m在消息中使用双引号进行调用。

给出的命令git行将是,如果$message是字符串some message here

git commit -m '"some' 'message' 'here"'

这是由于引用了双引号。

相反,这会起作用:

git commit -m "$message"

请使用提交消息模板。

假设模板在文件中template.txt如下所示:

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Pushing To all branches
# What is your Commit Message?

...那么当您这样做时,这将被插入到编辑器中提交消息的顶部

git commit -t template.txt

提供编辑器来编辑提交消息将使用户更容易正确地格式化正确的提交消息。

您还可以将commit.template存储库.git/config文件中的 设为要使用的模板文件的路径名(-t此时不需要)。

模板中以 开头的任何行都#不会被提交。

也可以看看:

相关内容