
私の Linux ボックスでは、bash で、2 つのスラッシュで示される「ダブル ルート」フォルダーにアクセスできます。
tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls
bin/ cdrom@ ...
フォルダとそのサブフォルダの内容は、「通常の」シングル スラッシュ ルートと同じです。サブフォルダにアクセスしても、ダブル スラッシュは消えません。異常は 3 つ以上のスラッシュで繰り返されません。これらはルートの単純な同義語です。
tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $
それはどのような場所ですか? バグですか? 誰かこの異常を説明できますか?
答え1
からバッシュ FAQ E10:
E10) 'cd //' を実行すると $PWD が '//' のままになるのはなぜですか?
POSIX.2の「cd」の説明では、三つ現在の作業ディレクトリを正規化するときに、先頭の 1 つ以上のスラッシュを 1 つのスラッシュに置き換えることができます。
これは、歴史的な互換性のためだと思います。Unix の特定のバージョンや初期のネットワーク ファイル システムでは、//hostname/path という形式のパスを使用して、サーバー 'hostname' 上の 'path' にアクセスしていました。
答え2
「それはバグではなく、機能です!」
まだ同じルート ディレクトリにいます。原因はわかりませんが、絶対パスの文字列の構築に関係しているのではないかと思います。他に確実なことがわかっている方がいたら、教えてください。
答え3
複数のスラッシュは使用したツールによって無視され、常に同じルート フォルダーにアクセスします。
答え4
パス名解決の目的で、複数のスラッシュは 1 つのスラッシュとして扱われます。
シェル プロンプトに表示されるのは、bash PS1 処理の結果です (bash マニュアル ページの「PROMPTING」セクションを参照)。
[root@linux /]# cd / ; echo $PWD
/
[root@linux /]# cd // ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/
結果は表示上の問題に過ぎず、常に同じルート ディレクトリにいます。これを確認するには、 を参照してください/proc/$$/root
。
[編集] まあ、私はこれを知りませんでした: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 「//」の意味は標準では定義されていませんが、「///」およびそれ以上のスラッシュは「/」と同等です。