在 Fish 中,这条诊断命令可能只打印一个换行:

echo HTTPS_PROXY=$HTTPS_PROXY

Fish 的变量保存的是列表。当没有加引号的变量与文本相连时,Fish 会把该文本与列表中的每个元素组合起来。未定义的变量,或者定义为不含任何元素的变量,不会产生任何组合。整个参数都会消失,包括 HTTPS_PROXY=。

给展开式加上引号,标签就能保留:

printf '%s\n' "HTTPS_PROXY=$HTTPS_PROXY"

这样即使变量没有任何元素,也会提供一个参数,所以标签仍然可见。给含多个元素的变量加引号只会用空格把元素连接起来;它并不能证明变量里包含一个可用的代理 URL。

要确认变量是否存在,请使用 Fish 的查询操作:

if set --query HTTPS_PROXY
    printf '%s\n' "HTTPS_PROXY=$HTTPS_PROXY"
else
    echo 'HTTPS_PROXY is not defined'
end

查询成功只说明变量已定义,并不代表它的值非空,也不代表客户端会使用它。导出与针对具体客户端的代理探测是两项独立的检查。

相关文章