ZSH 环境变量

ZSH 环境变量

这两行有什么区别:

export XDG_CONFIG_HOME="$HOME/.config"
export XINITRC="${XDG_CONFIG_HOME:-$HOME/.config}/x11/xinitrc"

还有这两行:

export XDG_CONFIG_HOME="$HOME/.config"
export XINITRC="${XDG_CONFIG_HOME}/x11/xinitrc"

换句话说,$XDG_CONFIG_HOME像第二个示例中那样单独引用变量与使用这样的变量有什么区别:${XDG_CONFIG_HOME:-$HOME/.config}?重复路径似乎是多余的,因为在变量${XDG_CONFIG_HOME}中引用变量之前我们已经设置了变量的值XINITRC

答案1

info zsh 'Parameter Expansion':

${NAME-WORD}
${NAME:-WORD}
如果 NAME 已设置,或者在第二种形式中为非空,则替换其值;否则替换为 WORD。在第二种形式中,NAME 可以被省略,在这种情况下,总是用 WORD 代替。

这是从 Bourne shell(从 70 年代末开始)继承的一个功能,并且存在于所有类似 Bourne 或 POSIX shell 中(除了最后一部分关于省略姓名这是一个zsh特定的扩展)。

如果非空,则扩展为变量的值,否则扩展为变量的${XDG_CONFIG_HOME:-$HOME/.config}值。XDG_CONFIG_HOME$HOME/.config

鉴于XDG_CONFIG_HOME上面已将其定义为保证非空的内容,因此它确实是多余的。

相关内容