在zsh

时间:2018-02-01 14:18:08

标签: zsh substitution

我注意到检查全局变量(如PATH,GOPATH等)的常规任务。这就是为什么我要编写小函数而不是输入大量字母

echo $PATH

我可以输入

e PATH

功能本身应该非常简单

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

但问题是如何替换变量来获取PATH的内容?

P.S。我使用的是zsh

1 个答案:

答案 0 :(得分:3)

处理此问题的传统(POSIX)表示法使用eval命令,许多人会警告你:

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

但是,在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.