为何zsh将$HOME:abc解析为/userbc?与bash解析差异探究
为什么zsh和bash对
$HOME:abc的解析结果不一样? 这俩shell的参数扩展规则存在差异:
- bash:它不识别
$HOME:abc里的冒号语法,只会简单将$HOME替换为实际路径(比如/user),再直接拼接:abc,所以结果是/user:abc。 - zsh:它支持在变量名后添加冒号开头的修饰符(比如
:h提取目录部分、:t提取文件名、:a转换为绝对路径这类)。当你写$HOME:abc时,zsh会先把:a当作修饰符处理(这里$HOME已是绝对路径,处理后仍为/user),再把剩余的bc直接拼在后面,最终得到/userbc。
如果想在zsh里得到和bash一致的结果,需要把冒号及后续内容当作普通字符串拼接,用引号或大括号明确范围:
echo "$HOME:abc" # 或者 echo ${HOME}:abc
内容的提问来源于stack exchange,提问作者ph3
相关产品推荐
相关产品推荐

