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

时间:2014-06-14 12:55:17

标签: linux bash shell

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

git add .
git commit -m $1
git push -u git@myrepo.git  master

我试图将所有3个命令放在一个脚本中,从而一起执行它们

我试过./upload_to_github.sh"小改变"

#!/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.

我也尝试了以下但没有用的

#!/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和双引号?

2 个答案:

答案 0 :(得分:4)

你遇到的是分词。

你应该做的是:

git commit -m "$1"

然后你调用你的脚本

./upload_to_github 'minor change'

要了解其工作方式,建议您阅读以下内容:Bash pitfall #2指向Word splittingGlob条款。阅读这些内容。

答案 1 :(得分:2)

或者,在您的脚本中使用

git commit -m "$*"

然后您可以调用脚本而无需引用参数:

./upload_to_github this is a minor change

引用时$*参数("$*")将所有位置参数作为单个字符串连接,使用IFS的第一个字符(除非重新定义的空格)作为分隔符。 http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters