Linux bash のチルダの意味 (ホームディレクトリではない) 質問する

Linux bash のチルダの意味 (ホームディレクトリではない) 質問する

まず、それが~/ホーム ディレクトリであることがわかります。CD を実行する~か、~/ホーム ディレクトリに移動します。

しかし、それはcd ~X私を特別な場所に連れて行ってくれます。そこにはX何でもあるようです。

bash では、「 」を押して Tab キーを押すと、やなどのcd ~一連の~Xオプションが表示されます。これらのフォルダーに移動して を実行すると、これらのフォルダーがホーム ディレクトリ内になく、あちこちに分散していることがわかります。~mail~postgres~sshpwd

これらはエイリアスではありません。確認しました。これらはenv.変数ではありません。そうでなければ、 が必要になります$

これらのリンクを設定するものは何ですか? また、これらが設定されている場所はどこで確認できますか?

ベストアンサー1

これは「チルダ展開「これは OS ではなくシェルの機能です。たとえば、csh では動作が異なります。」

情報がどこから来るのかという質問にお答えします。あなたのホームディレクトリは変数から取得されます$HOME(そこに何を保存してもかまいません)。一方、他のユーザーのホームは、getpwent()この機能は通常、NSSA; デフォルトでは から値が取得されます/etc/passwdが、NIS、LDAP、SQL データベースなど、任意のソースを使用して情報を取得するように構成することもできます。

チルダ展開はホーム ディレクトリの検索以上のものです。要約すると次のようになります。

~              $HOME
~fred          (freds home dir)

~+             $PWD       (your current working directory)
~-             $OLDPWD    (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirsおよび~1、などは、および~-1と組み合わせて使用​​されます。pushdpopd

追加編集:

としてショーン・ブライトコメントで指摘されているように、ホームディレクトリに関する基本的なチルダの動作は、POSIX準拠シェル。さらに、単語表現()この動作を実装するために C API 関数が指定されています。ただし、当然ながら注意して使用してください。

おすすめ記事