我尝试编写一个别名来检查同一工作区下所有包的git状态。如下所示:
alias ws-git-status="for d in *; do (cd $d && pwd && git status);done"
当我在工作区下运行alais时,会报告错误:
4702 ◯ pwd
/Users/adam/workplace
4c327596e4c7 ॐ ~/workplace:
4703 ◯ ws-git-status
/usr/share/zsh/5.2/functions
fatal: Not a git repository (or any of the parent directories): .git
但是如果我在别名定义中使用单引号:
alias ws-git-status='for d in *; do (cd $d && pwd && git status);done'
效果很好。我在双引号和单引号Difference between single and double quotes in Bash
之间搜索差异似乎双引号将取$
的值,但单引号会将其视为一个字符,这无法解释我的情况。任何人都可以帮我一些解释或有用的链接?我对此事感到困惑,无法弄清楚。
答案 0 :(得分:2)
$d
之类的变量引用在双引号内展开。因此,对于引用的别名定义,当您定义不是您想要的别名时,会扩展$d
。输入alias ws-git-status
以查看其定义方式。
如果你使用单引号,$d
在定义别名时不会扩展,它会像你期望的那样工作。
答案 1 :(得分:0)
你应该使用别名;定义一个函数:
ws-git-status () {
for d in *; do
(cd "$d" && pwd && git status)
done
}