Linux 如何在bash脚本中以双引号传递参数

Linux 如何在bash脚本中以双引号传递参数,linux,bash,shell,Linux,Bash,Shell,通常使用这3个命令将我的代码推送到repo git add . git commit -m $1 git push -u git@myrepo.git master 我尝试将所有3个命令放在一个脚本中,从而一起执行它们 我尝试了./upload_到_github.sh“微小更改” 这是错误的 error: pathspec 'change' did not match any file(s) known to git. 我也试过下面的方法,但没有用 #!/bin/bash #upload_

通常使用这3个命令将我的代码推送到repo

git add .
git commit -m $1
git push -u git@myrepo.git  master
我尝试将所有3个命令放在一个脚本中,从而一起执行它们

我尝试了./upload_到_github.sh“微小更改”

这是错误的

error: pathspec 'change' did not match any file(s) known to git.
我也试过下面的方法,但没有用

#!/bin/bash
#upload_to_github.sh
git add .
git commit -m \"$1\"
git push -u git@myrepo.git  master
这给了我一个错误

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

他们两个似乎都不工作。如何在脚本中传递带双引号的$1?

您遇到的是分词

你应该做的是:

git commit -m "$1"
然后你像这样调用你的脚本

./upload_to_github 'minor change'
为了理解它的工作方式,我建议您阅读以下内容:它指向和文章。也请阅读这些内容。

或者,在脚本中使用

git commit -m "$*"
然后您可以调用脚本,而无需引用参数:

./upload_to_github this is a minor change

$*
参数在引用时(
“$*”
)将所有位置参数作为单个字符串连接起来,使用
IFS
的第一个字符(空格,除非重新定义)作为分隔符

要传递引用的值,请使用
“$1”
。为了传递引用的值,并引用值本身,使用<代码> \“1美元”“< /Cord>”,但我不明白为什么要这样做。我很想知道为什么你不认为使用这样的脚本是有用的。因为你仍然需要逃避原始参数的任何引用。仅仅在开头和结尾加引号并不能保证安全(为了澄清,我在这里讨论的是双引号的情况)。在您的情况下,我认为您只需要
“$1”
版本,不是吗?这是真的,但即使我直接从命令行通过commit传递它,我也必须转义。如果我的提交消息有双引号,独立于组合所有3个命令,我将不得不避开双引号。是的,这也会起作用,但是它可能会给一些人带来错误的安全感<代码>上传到“\u github Asterisk*”然后砰的一声!
./upload_to_github this is a minor change