誤ってcd //
ではなくcd /
コマンドを入力しましたが、エラーが発生する代わりに、シェル(Bash)が//
ディレクトリにいるかのようにプロンプトを表示しました
<username>@<hostname>://$
<username>@<hostname>://$ pwd
//
ディレクトリの内容をリストすると、それが/
と同じであることがわかります。
では、cd //
は正確には何をするのでしょうか。cd /
との違いは何ですか。
実際にはそれは何も意味せず、無視されます。
Bash FAQ E10: から:
E10)なぜ「cd //」は$ PWDを「//」のままにするのですか?
POSIX.2の「cd」の説明では、現在の作業ディレクトリを正規化するときに、3つ以上の先行スラッシュを1つのスラッシュに置き換えることができると述べています。
これは、歴史的な互換性のためだと思います。 UNIXの特定のバージョン、および初期のネットワークファイルシステムでは、// hostname/pathという形式のパスを使用して、サーバー「hostname」の「path」にアクセスしていました。
また nix標準 は次のように述べています:
2つの連続するスラッシュで始まるパス名は、実装定義の方法で解釈される場合がありますが、2つ以上の先行スラッシュは単一のスラッシュとして扱われます。
これは、AskUbuntuの answer で、同じディレクトリであることを確認しています。さらに、 POSIXパス名解決の仕様 から引用するとわかりやすくなります。
単一のスラッシュで構成されるパス名は、プロセスのルートディレクトリに解決されます。 nullパス名は正常に解決されません。 2つの連続するスラッシュで始まるパス名は、実装定義の方法で解釈される場合がありますが、2つ以上の先行スラッシュは単一のスラッシュとして扱われます。