我习惯于zsh
使用 .s 向命名目录哈希表添加条目hash -d <name>=<value>
。最近,我阅读了zshbuiltins(1)
手册页,在那里我发现了以下内容(hash
内置的描述):
通常,人们可以通过修改 PATH(对于命令哈希表)或通过创建适当的 shell 参数(对于命名目录哈希表)来修改这些表。
我不明白这个by creating appropriate shell parameters
机制是如何运作的。有人能给我举个例子吗?
答案1
这命名目录(除了用户的主目录之外)是存储在变量中的目录,然后您可以使用~varname
它们来访问它们,然后将条目添加到哈希表中。
例子:
$ var=/usr/local
$ hash -d
$ echo ~var
/usr/local
$ hash -d
var=/usr/local
$ : ~root
$ hash -d
root=/root
var=/usr/local
(我自己从来没有真正理解这个功能的意义)
详情请参阅info zsh 'static named directories'
(我不会使用man
这种尺寸的手册)。
答案2
此功能的要点在于,如果您正在处理多个路径并不断从目录树中的一个分支更改到另一个分支,那么它会非常方便。例如,如果您有两个相同的目录树,一个为根目录~/home/src/project/devel
,另一个为根目录树,~/home/src/project/production
则可以执行以下操作:
typeset -e dev=~/home/src/project/devel ; typeset -e prod=~/home/src/project/production ;
您可以方便地使用~dev
or ,就像在任何采用路径作为参数 v.gr 的命令中使用or~prod
一样:~
~user
`cp -Rav ~dev/module ~/prod 将模块从开发复制到生产。让您在您可能经常使用的常用目录上进行大量输入。它们不需要植根于同一目录,这只是一个简单的用例。
我发现命名我经常访问的深层嵌套目录以供参考非常方便,例如/use/local/lib/zsh/site-functions
这~zfunc
适用于任何采用路径的命令,这使其成为非常强大的快捷方式。