zsh
私は名前付きディレクトリハッシュテーブルにエントリを追加するために.sを使用することに慣れていますhash -d <name>=<value>
。最近zshbuiltins(1)
マンページを読んだところ、次のような内容が見つかりました(hash
組み込み説明)。
通常、PATH(コマンドハッシュの場合)を変更するか、適切なシェル引数(名前付きディレクトリハッシュの場合)を作成してこれらのテーブルを変更できます。
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
この機能の要点は、複数のパスで作業し、ディレクトリツリーのあるブランチから別のブランチに絶えず変更する場合に非常に便利です。たとえば、2つの同じディレクトリツリーがある場合(1つはルートに~/home/src/project/devel
、もう1つはルートに)、~/home/src/project/production
次のことができます。
typeset -e dev=~/home/src/project/devel ; typeset -e prod=~/home/src/project/production ;
~dev
v.grへの引数としてパスを使用するコマンドと同様に、orを便利に使用できます~prod
。~
~user
` cp -Rav ~dev/module ~/prod は開発から本番までモジュールをコピーします。よく使用する共通ディレクトリに対して多くの入力を実行できます。同じディレクトリにルートを置く必要はありません。これは単なるユースケースです。
参照のために頻繁にアクセスする深くネストされたディレクトリの名前を指定するのが非常に便利であることがわかりました。たとえば、/use/local/lib/zsh/site-functions
これは~zfunc
パスを使用するすべてのコマンドで機能するため、非常に強力なショートカットです。