在 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.
我注意到检查 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.