この質問にはすでに回答があります :Linuxは複数の連続したパス区切り文字(/ home //// username /// file)をどのように処理しますか?
(6つの回答)
3年前に閉鎖されました。
Linux
(6つの回答)
3年前に閉鎖されました。
unix / linuxでは、パス内の任意の数の連続するフォワードスラッシュは、通常、単一のフォワードスラッシュと同等です。例
$ cd /home/shum
$ pwd
/home/shum
$ cd /home//shum
$ pwd
/home/shum
$ cd /home///shum
$ pwd
/home/shum
しかし、何らかの理由で、絶対パスの先頭にある2つのフォワードスラッシュは特別に扱われます。例
$ cd ////home
$ pwd
/home
$ cd ///
$ pwd
/
$ cd //
$ pwd
//
$ cd home//shum
$ pwd
//home/shum
パッチ内の他の場所にある他の数の連続するフォワードスラッシュは切り捨てられますが、それを基準にしてファイルシステム内を移動しても、最初の2つは残ります。
どうしてこれなの? /…と//…の間に違いはありますか?
承認された回答:
ほとんどの場合、パス内で繰り返されるスラッシュは、単一のスラッシュに相当します。この動作はPOSIXによって義務付けられており、ほとんどのアプリケーションがそれに準拠しています。例外は、「2つの連続するスラッシュで始まるパス名は、実装定義の方法で解釈される可能性がある」ということです(ただし、///foo
/foo
と同等です 。
ほとんどのユニスは、最初の2つのスラッシュで特別なことは何もしません。特にLinuxはそうではありません。 Cygwinの機能://hostname/path
ネットワークドライブ(SMB)にアクセスします。
実際、Linuxが//
で特別なことをしているわけではありません。 :bashの現在のディレクトリ追跡です。比較:
$ bash -c 'cd //; pwd'
//
$ bash -c 'cd //; /bin/pwd'
/
Bashは、OSが//
を処理している可能性があることに注意を払っています。 特別にそしてそれを保ちます。ダッシュも同じです。 Kshとzshは、Linuxで実行している場合はそうではありません。(私はチェックしていませんが)コンパイル時の設定があると思います。