如何修复zsh: unrecognized modifier `P'错误?Ubuntu 14.04环境方案
解决zsh中
unrecognized modifier 'P'的问题 这个问题我之前碰到过,核心原因是你用的zsh 5.4.2-dev版本不支持:P这个参数展开修饰符——:P是在后续的zsh版本(比如5.7及以后)才引入的,作用是将路径解析为绝对路径并跟随符号链接。
下面给你两个可行的解决方案:
方案1:用传统命令替代:P的功能
如果暂时不想升级zsh,可以用readlink或者realpath命令实现相同的绝对路径解析效果:
bad_pwd="/${(l:16000:: :):-}" print $(readlink -f "$bad_pwd")
readlink -f会递归解析路径中的符号链接,输出绝对路径;- 记得用双引号包裹
$bad_pwd,避免空格等特殊字符导致的解析错误。
如果系统里没有readlink(Ubuntu 14.04默认是预装的),也可以用realpath替代:
print $(realpath "$bad_pwd")
方案2:升级zsh到支持:P的版本
如果希望直接使用:P修饰符,需要升级你的zsh版本。在Ubuntu 14.04上可以按以下步骤操作:
- 先添加zsh官方PPA源:
sudo add-apt-repository ppa:zsh-users/zsh sudo apt-get update
- 执行升级命令:
sudo apt-get install zsh
升级完成后,重启终端或者执行exec zsh切换到新版本,再运行你原来的命令就不会报错了:
bad_pwd="/${(l:16000:: :):-}" print ${bad_pwd:P}
另外补充下:你原来的命令里${(l:16000:: :):-}是生成16000个空格的字符串,拼上/后变成一个特殊路径,:P修饰符就是要把这个路径转换为绝对路径(哪怕路径本身无效,修饰符依然会按规则处理)。
内容的提问来源于stack exchange,提问作者yh gao
相关产品推荐
相关产品推荐

