.profile函数在字符串concat中复制我的参数?

时间:2018-06-20 22:42:30

标签: bash function shell alias string-concatenation

我将Git提交问题编号与GitHub问题结合使用。为了节省时间,我编写了一个bash函数来创建这样的提交消息:

git commit -m "#4 my commit message"

致电

gci 4 "my commit message"

其中4是发行号,其后是提交消息。

但是,我当前的实现方式:

alias gcm='git commit -m '
gci(){
    index="${@:1}"
    message="#$index ${@:2}"
    gcm "$message"
}

两次产生提交消息:

$ gci 4 "my commit message"
[iss2 79d9540] #4 my commit message my commit message
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 h.z

是什么原因导致消息重复两次?

1 个答案:

答案 0 :(得分:0)

${@:1}${@:2}不能按预期工作,请对第一个参数使用$1,对第二个参数使用$2

alias gcm='git commit -m '
gci(){
    index="$1"
    message="#$index $2"
    gcm "$message"
}

请注意,别名在非交互式shell中不起作用。
关于${@:1},来自here

  

$ {var:pos}
  变量var从偏移量pos开始扩展。

因此,如果"$@" == "4 my commit message",则:
"${@:1}" == " my commit message"
"${@:2}" == "my commit message"
串联${@:1} ${@:2}时,您会看到两次我的提交消息。