zsh中判断字符串为空的方法及自定义函数失效问题求助
解决zsh中XDG环境变量未正确初始化的问题
你的脚本逻辑存在错误:export_if_empty函数里的[[ -z "$1" ]]判断的是传入的变量名参数是否为空,而不是这个变量的实际值是否为空,所以即使XDG_CONFIG_HOME未定义或为空,也不会触发赋值操作。
原错误代码
function export_if_empty { [[ -z "$1" ]] && declare -gx "${1}"="$2" } export_if_empty 'XDG_CONFIG_HOME' "$HOME/.config" export_if_empty 'XDG_DATA_HOME' "$HOME/.local/share" export_if_empty 'XDG_CACHE_HOME' "$HOME/.cache" export_if_empty 'XDG_DATA_DIRS' '/usr/share:/usr/local/share' export_if_empty 'XDG_CONFIG_DIRS' '/etc/xdg' unset -f export_if_empty
修正后的代码
需要用间接引用来判断变量的实际值是否为空,以下提供两种可行的修正版本:
版本1(zsh专属语法)
function export_if_empty { [[ -z "${(P)1}" ]] && declare -gx "${1}"="$2" } export_if_empty 'XDG_CONFIG_HOME' "$HOME/.config" export_if_empty 'XDG_DATA_HOME' "$HOME/.local/share" export_if_empty 'XDG_CACHE_HOME' "$HOME/.cache" export_if_empty 'XDG_DATA_DIRS' '/usr/share:/usr/local/share' export_if_empty 'XDG_CONFIG_DIRS' '/etc/xdg' unset -f export_if_empty
版本2(兼容zsh与bash的通用语法)
function export_if_empty { [[ -z "${!1}" ]] && declare -gx "${1}"="$2" } export_if_empty 'XDG_CONFIG_HOME' "$HOME/.config" export_if_empty 'XDG_DATA_HOME' "$HOME/.local/share" export_if_empty 'XDG_CACHE_HOME' "$HOME/.cache" export_if_empty 'XDG_DATA_DIRS' '/usr/share:/usr/local/share' export_if_empty 'XDG_CONFIG_DIRS' '/etc/xdg' unset -f export_if_empty
验证方法
执行脚本后,通过以下命令检查变量是否正确设置:
echo $XDG_CONFIG_HOME printenv XDG_CONFIG_HOME
内容的提问来源于stack exchange,提问作者Syed Shanto
相关产品推荐
相关产品推荐

