有没有一种方法可以将函数中的所有参数粘贴到一行中?

有没有一种方法可以将函数中的所有参数粘贴到一行中?

我现在有这个,.bashrc因为我git status经常使用git diff。我希望能够读取可能作为选项传入的其他条目,例如-swith git diff。我怎样才能做到这一点功能而不是一个别名?我只知道这$#会给我传入的参数数量,但是如何status在第 48 行后粘贴所有参数?

 42 # =========================================================
 43 #                         Git
 44 # =========================================================
 45 g () {
 46   case $1 in
 47     "s")
 48       git status
 49       ;;
 50     "d")
 51       git diff
 52       ;;
 53   esac
 54 }

答案1

"$@"将被替换为正确引用的所有参数,因此在移动后删除子命令快捷方式:

g () {
  cmd=$1
  shift
  case "$cmd" in
    s) git status "$@" ;;
    d) git diff "$@" ;;
  esac
}

不过,我建议不要这样做,而是使用git别名;设置上述内容:

git alias s status
git alias d diff

或者,如果您没有git-alias(通常在git-extras),

git config --global alias.s status
git config --global alias.d diff

(您只需执行一次,别名存储在~/.gitconfig)。

然后在你的外壳中,

alias g=git

你会发现g setc.如你所期望的那样工作,包括参数。

答案2

举例说明

#!/bin/bash

g () {
    for arg in "$@"; do echo "$arg"; done
}
g 1 2 3 4

运行脚本

$ ./git.sh
1
2
3
4

相关内容