如何在Zsh中通过字符串路径执行source命令?
解决Zsh中
~路径未被正确解析的问题 哈,这个问题我之前也踩过坑!在Zsh里,双引号包裹的~不会被自动展开成你的家目录路径,这就是为啥你执行local_config="~/.local_config" source $local_config时,shell找不到对应文件的原因——变量里存的是字面量的~/.local_config,而不是实际的用户家目录下的路径。
下面给你几个靠谱的解决办法:
直接去掉双引号,让
~自动展开
当~不在引号里时,Zsh会自动把它解析成$HOME对应的路径,这样变量里就会存正确的绝对路径:local_config=~/.local_config source $local_config用
$HOME替代~,双引号内正常解析$HOME在双引号中会被正常展开成用户家目录,这种写法更清晰,也避免了引号对~的限制:local_config="$HOME/.local_config" source $local_config强制对变量内容进行波浪号展开(进阶用法)
如果因为某些原因必须保留双引号里的~,可以用Zsh特有的${~变量名}语法,强制让shell解析变量里的~:local_config="~/.local_config" source ${~local_config}
简单说下背后的逻辑:Zsh的波浪号展开规则是,只有当~是一个单词的首字符且未被双引号包裹时,才会触发展开;双引号会抑制波浪号的展开,但不会影响环境变量(比如$HOME)的解析,这也是前两种方法可行的原因。
内容的提问来源于stack exchange,提问作者chaosink
相关产品推荐
相关产品推荐

