zshrc别名定义中的双引号和单引号之间的差异

时间:2017-10-30 00:34:06

标签: alias zsh

我尝试编写一个别名来检查同一工作区下所有包的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

之间搜索差异

似乎双引号将取$的值,但单引号会将其视为一个字符,这无法解释我的情况。任何人都可以帮我一些解释或有用的链接?我对此事感到困惑,无法弄清楚。

2 个答案:

答案 0 :(得分:2)

$d之类的变量引用在双引号内展开。因此,对于引用的别名定义,当您定义不是您想要的别名时,会扩展$d。输入alias ws-git-status以查看其定义方式。

如果你使用单引号,$d在定义别名时不会扩展,它会像你期望的那样工作。

答案 1 :(得分:0)

你应该使用别名;定义一个函数:

ws-git-status () {
    for d in *; do
      (cd "$d" && pwd && git status)
    done
}