我正在阅读一些zsh脚本,并发现了这种语法${PWD:A}
。我知道$ PWD是什么以及bash
变量替换语法(很大程度上要归功于this excellent tutorial)。尽管如此,我还没有找到任何文档来解释zsh
的$ {variable:flag}语法。
答案 0 :(得分:1)
${PWD:A}
返回$PWD
的无符号链接绝对路径。它通过以下方式实现:
..
和.
realpath
系统调用 - 现代系统会执行此操作。 由于$PWD
已经是当前目录的绝对路径,并且不包含..
或.
个元素(至少它实际上不应该), ${PWD:A}
只需解析任何符号链接。
${name:flag}
语法允许在参数上使用历史扩展修饰符。
实际上 在Parameter Expansion of the ZSH Manual部分中进行了解释(另请参阅man zshexpn
)。不幸的是,它只是文本中的一个句子,并未与其他${nameXXXXX}
扩展列出:
除了以下操作之外,还可以应用历史记录扩展中的修饰符中描述的冒号修饰符:例如,
${i:s/foo/bar/}
对参数$i
的扩展执行字符串替换。
可以在Modifiers under History Expansion小节中找到可用修饰符的列表。如果是A
:
a
将文件名转换为绝对路径:如有必要,请在当前目录前添加,并解决路径中
..
和.
的任何使用问题。请注意,即使文件或任何中间目录不存在,也会发生转换。
A
作为
a
,但也尽可能解决符号链接的使用问题。请注意,..
的分辨率在符号链接解析之前发生。此调用等同于a,除非您的系统具有realpath
系统调用(现代系统)。