在 Fish 中,未设置的代理变量可能删除整个参数
在 Fish 中给代理诊断加上引号,这样未设置或元素为空的变量就不会抹掉随附的标签。
在 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
查询成功只说明变量已定义,并不代表它的值非空,也不代表客户端会使用它。导出与针对具体客户端的代理探测是两项独立的检查。