在 zsh 中回显全局变量

Echoing the global variables in zsh

我注意到检查 PATH、GOPATH 等全局变量是常见的任务。这就是为什么我想编写小函数而不是输入很多字母

echo $PATH

我只能打字

e PATH

函数本身应该很简单

function e() {
  echo $()   # it produces the error "command not found"
}

但是问题是如何代入一个变量来获取PATH的内容呢?

P.S。我正在使用 zsh

处理此问题的传统 (POSIX) 表示法使用 eval 命令,许多人会警告您不要这样做:

e() {
  eval echo \"$\"
}

然而,在bash中,您可以使用变量间接寻址:

function e() {
  printf '%s\n' "${!1}"
}

而在 zsh 中,您在我最初的回答后添加为标签,间接处理方式不同:

function e() {
  printf '%s\n' "${(P)1}"
}

这使用了一个 参数扩展标志,您可以在 man zshexpn.

中阅读相关内容
   P   This forces the value of the parameter name to be interpreted as a
       further parameter name, whose value will be used where  appropriate.