我现在有这个,.bashrc
因为我git status
经常使用git diff
。我希望能够读取可能作为选项传入的其他条目,例如-s
with 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 s
etc.如你所期望的那样工作,包括参数。
答案2
举例说明
#!/bin/bash
g () {
for arg in "$@"; do echo "$arg"; done
}
g 1 2 3 4
运行脚本
$ ./git.sh
1
2
3
4