PostgreSQL中,configure中第一段是如下的代码:
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${ 1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBSTelse case `(set -o) 2>/dev/null` in *posix*) set -o posix ;;esacfi
对 ${ZSH_VERSION+set} 进行了探究:
首先判断 当前 shell 的种类:
#abc
bash: abc: command not found由此可知,当前是bash。
#echo $ZSH_VERSION##echo ${ZSH_VERSION}##echo ${ZSH_VERSION+set}#
转换为zsh 再执行:
#zsh##echo $ZSH_VERSION4.2.6##echo ${ZSH_VERSION}4.2.6##echo ${ZSH_VERSION+set}set#
再看 test -n "${ZSH_VERSION+set}"
在bash下:
#test -n "${ZSH_VERSION+set}" && ls#
在zsh下:
#test -n "${ZSH_VERSION+set}" && ls#install.log Desktop
也就是说,本文一开始的代码段第一行是这样的:
判断系统所处的Shell,如果是 zsh, 则执行 emulate sh 命令。如果不是就跳过。