~/Maryは相対パスですか? [コピー]

~/Maryは相対パスですか? [コピー]

Maryディレクトリだとしましょう。次のパスは~/Mary相対パスですか?

答え1

いいえ、相対的なものではありません。

~エイリアスがあるフルパスです。

相対パスは、現在のディレクトリ位置に対する相対パスを記述します。しかし、~/Mary現在どのディレクトリにあってもまったく同じです。

現在、次のようにログインしているとします。単発/home/Bobまた、ディレクトリにも../Mary相対パスの例があります/home/Mary。あなたが今ここにいたなら、それでもそうでしょうが/etc/something~/Mary今でしょう。/home/Bob/Mary../Mary/etc/Mary

Bashは~これを特定の方法で処理し、常に$HOME

詳細については、次を参照してください。

答え2

これが~/Maryシステムコール(たとえばopen()...)で指定されたパスの場合は相対パスであり、stat()現在のディレクトリ内のディレクトリMaryの相対エントリです。~したがって、現在のディレクトリがある場合、/tmpこれは/tmp/~/Maryファイルです。

ただし、~/Maryチルダ拡張をサポートするシェル(または他のツール)で引用符なしで使用すると、~変数の内容$HOME(設定されている場合)に置き換えられ、通常は$HOMEそのような/home/me内容を含む絶対パスが~/Mary拡張されます。そのため/home/me/Mary絶対パスでもあります。

相対パスに変更すると$HOME(不要な場合)、~/Maryシェルは相対パスに展開されます。

$ HOME=..; echo ~/Mary
../Mary

これを次に変更した場合//foo(またはホームディレクトリが/ホームディレクトリだった場合root)、拡張子は~/Maryもはや絶対パス名どちらもありません相対パス名(少なくともPOSIXで定義されているとおり)

bash4.0より前のバージョンでは、次のような興味深いこともできます。

$ HOME='*' bash-3.2.48 -c 'cd /; echo ~/mount'
bin/mount run/mount

(4.0で修正)

追加情報:Unix&Linux存在する

答え3

賢く行動しよう

他の人が言ったように、これはエイリアスなので、厳密に言えば絶対パスでも相対パスでもありません。実際には、作業ディレクトリとは何の関係もないので、絶対パスです。

今詳しく学んでください。オペレーティングシステムレベルではエイリアスはサポートされていないため、すべての絶対パスがスラッシュで始まるというルールが維持され、他のすべてのパスは相対的です。ただし、アプリケーションは単に名前をカーネルに渡すよりも多くのことを行うことができます。:の特別な処理~-一般的であり、アプリケーションによって異なります。-起動オプションの場合、相対パスを使用するには、ほとんどすべての場合に相対処理を強制するように事前設定できます(私が知る限り、唯一の例外は、または./一部の実装ではスラッシュを含むホスト名です)。特定のコマンドを検出するために使用されるURLとリモートホストが識別され、前のコマンドも場合によっては特別な意味を持ちますが、これらのケースはすべてOSレベルではなくアプリケーションレベルの問題です。rcpscp://

ほとんどすべてのシェル(1つの例外を知っています)と多くのUnixアプリケーションは、基本的なチルダ拡張をサポートしています。最もうまく機能する可能性がある2つのチルダ拡張は、~/path(先頭のチルダが変数の内容で置き換えられている場合$HOME)と~name/pathnameユーザーデータベースでユーザーnameのホームディレクトリを見つける場合)です。奇妙なことは、ユーザーデータベースに絶対パスが含まれていないか(これを実行しない)、絶対パスが含まれていない$HOME場合(これも実行しません)です。他の形式のチルダ拡張も可能です。たとえば、Bashは~-アプリケーションレベルで以前の作業ディレクトリに戻ります(シェルはアプリケーションです)。

答え4

はい、〜/ Maryは相対パスです。

問題は定義の1つであるようです。正式なシステム全体の定義が存在するかどうかはわかりません。絶対パスそして相対パス

「パス」には2つのタイプがあります。比較的そして純粋な。絶対パスは常に同じリソースを指します。相対パスは、他のリソースに関連するリソースを指します。

~ を使用する場合、通常は現在のユーザーのホームディレクトリに展開するために使用されます。ホームディレクトリは現在のユーザーによって異なりますので、〜/ Maryは比較的現在のユーザーのホームディレクトリに移動します。

たとえば、bobユーザー~/Maryに拡張することができ/home/bob/Mary、aliceユーザーに拡張することができます/home/alice/Mary

追加例/Mary
現在のディレクトリに対する相対
../Mary 親ディレクトリに対する相対
~/Mary 現在のユーザーのホームディレクトリに対する相対
Mary 現在のディレクトリに対する相対
/Mary ルートディレクトリに対する相対。ルートディレクトリは固定されているので絶対パスです。

ただし、ルートディレクトリも現在のホストに相対的であると主張することができます。パスにホストを追加すると、ホスト名:/ Maryになります。ただし、「ホスト名」はホスト名が定義されているシステムに相対的であるため、これは実際の絶対パスではありません。

関連情報