在zsh中,测试变量是否已设置的规范/惯用方法是什么?
if ....something.... ; then
print "Sweet, that variable is defined"
else
print "That variable is not defined"
fi
这里是bash的SO答案。
在 Zsh 中通常这样做:
if (( ${+SOME_VARIABLE} )); then
例如:if (( ${+commands[brew]} )); then
brew install mypackage
else
print "Please install Homebrew first."
fi
在Zsh 5.3及更高版本中,您可以在条件表达式中使用-v
运算符:
if [[ -v SOME_VARIABLE ]]; then
符合POSIX标准的测试将会是:
if [ -n "${SOME_VARIABLE+1}" ]; then
-n
而不是-z
吗?-z
是相反的。 - Zenexerisset() { [[ $(eval echo "\${${1}+1}") ]]; }
- Jonathan Hecho "${+SOME_VAR}"
。 - cambunctious在条件表达式中使用-v
操作符(在zsh
5.3中引入)。
% unset foo
% [[ -v foo ]] && echo "foo is set"
% foo=
% [[ -v foo ]] && echo "foo is set"
foo is set
-v
接受一个 名称,如果您提供了参数扩展,那么使用的是结果值作为名称。(我不敢说在 shell 中的任何东西都是“显而易见”的 :) ) - undefined
bash
的原始版本除了作为一个符合 POSIX 标准的 shell 以外,实际上并没有什么用处;它已经过时多年了。在 OS X Sierra 中,/bin/zsh
应该是 5.2 版本。 - chepner