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で定義されているとおり)
bash
4.0より前のバージョンでは、次のような興味深いこともできます。
$ HOME='*' bash-3.2.48 -c 'cd /; echo ~/mount'
bin/mount run/mount
(4.0で修正)
追加情報:Unix&Linux存在する
答え3
賢く行動しよう
他の人が言ったように、これはエイリアスなので、厳密に言えば絶対パスでも相対パスでもありません。実際には、作業ディレクトリとは何の関係もないので、絶対パスです。
今詳しく学んでください。オペレーティングシステムレベルではエイリアスはサポートされていないため、すべての絶対パスがスラッシュで始まるというルールが維持され、他のすべてのパスは相対的です。ただし、アプリケーションは単に名前をカーネルに渡すよりも多くのことを行うことができます。:
の特別な処理~
は-
一般的であり、アプリケーションによって異なります。-
起動オプションの場合、相対パスを使用するには、ほとんどすべての場合に相対処理を強制するように事前設定できます(私が知る限り、唯一の例外は、または./
一部の実装ではスラッシュを含むホスト名です)。特定のコマンドを検出するために使用されるURLとリモートホストが識別され、前のコマンドも場合によっては特別な意味を持ちますが、これらのケースはすべてOSレベルではなくアプリケーションレベルの問題です。rcp
scp
:
//
ほとんどすべてのシェル(1つの例外を知っています)と多くのUnixアプリケーションは、基本的なチルダ拡張をサポートしています。最もうまく機能する可能性がある2つのチルダ拡張は、~/path
(先頭のチルダが変数の内容で置き換えられている場合$HOME
)と~name/path
(name
ユーザーデータベースでユーザーname
のホームディレクトリを見つける場合)です。奇妙なことは、ユーザーデータベースに絶対パスが含まれていないか(これを実行しない)、絶対パスが含まれていない$HOME
場合(これも実行しません)です。他の形式のチルダ拡張も可能です。たとえば、Bashは~-
アプリケーションレベルで以前の作業ディレクトリに戻ります(シェルはアプリケーションです)。
答え4
はい、〜/ Maryは相対パスです。
問題は定義の1つであるようです。正式なシステム全体の定義が存在するかどうかはわかりません。絶対パスそして相対パス
「パス」には2つのタイプがあります。比較的そして純粋な。絶対パスは常に同じリソースを指します。相対パスは、他のリソースに関連するリソースを指します。
~ を使用する場合、通常は現在のユーザーのホームディレクトリに展開するために使用されます。ホームディレクトリは現在のユーザーによって異なりますので、〜/ Maryは比較的現在のユーザーのホームディレクトリに移動します。
たとえば、bobユーザー~/Mary
に拡張することができ/home/bob/Mary
、aliceユーザーに拡張することができます/home/alice/Mary
。
追加例/Mary
現在のディレクトリに対する相対
../Mary 親ディレクトリに対する相対
~/Mary 現在のユーザーのホームディレクトリに対する相対
Mary 現在のディレクトリに対する相対
/Mary ルートディレクトリに対する相対。ルートディレクトリは固定されているので絶対パスです。
ただし、ルートディレクトリも現在のホストに相対的であると主張することができます。パスにホストを追加すると、ホスト名:/ Maryになります。ただし、「ホスト名」はホスト名が定義されているシステムに相対的であるため、これは実際の絶対パスではありません。