ダブルルートフォルダーとシングルルートフォルダー


14

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:/ $

どんな場所ですか?バグですか?誰もが異常を説明できますか?


良い質問-私は同じ行動に気づいたが、なぜこれが起こるのか尋ねなかった。
ラジュエット

回答:


18

Bash FAQ E10から:

E10)なぜ「cd //」は$ PWDを「//」のままにするのですか?

POSIX.2では、「cd」の説明で、現在の作業ディレクトリを正規化するときに、先頭の3つ以上のスラッシュを単一のスラッシュに置き換えることができると述べています。

これは、歴史的な互換性のためです。Unixの特定のバージョン、および初期のネットワークファイルシステムでは、// hostname / pathという形式のパスを使用して、サーバー 'hostname'の 'path'にアクセスしていました。


1
Domain / OSはそのようなシステムの1つです。
user1686

1
ダブルスラッシュはまだ使用されます。これは、Universal(またはUniform。主要なソースが見つからないようです)Naming ConventionまたはUNCの一部です。Windows、Unix、およびLinuxで表示されます。それがたまたまURLで二重スラッシュが使用される理由です。
アイザックラビノビッチ

1

「これはバグではなく、機能です!」

まだ同じルートディレクトリにいます。これの起源はわかりませんが、絶対パスの文字列を構築することに関係があるのではないかと疑っています。他の誰かが確実に知っているなら、パイプアップしてください。


0

複数のスラッシュは使用したツールによって無視され、常に同じルートフォルダーに到達します。


では、bashは///をそのままにして//を/に変更するのはなぜですか?
トマス

0

複数のスラッシュは、パス名解決のために単一のスラッシュとして扱われます。

シェルプロンプトに表示されるのは、bash PS1処理のアーティファクトです(bashのマンページの「プロンプト」セクションを参照)。

[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 「//」の意味は標準では定義されていないが、「///」さらにスラッシュは「/」と同等です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.