パスで//はどういう意味ですか?


9

cdrootになるまでスペルを間違えたとき、ターミナルで作業していました(/)。誤って、入力//してターミナルに入りました:

root@weblocalhost://#

入力するとpwd応答//が返されますが、入力ls -sすると/ディレクトリと同じリストが表示されます。

2つ以上入力すると、///次のようになります。

root@weblocalhost:/#

/2を除いて常に1 です。違いはありますか、何の//ためですか?

回答:


8

/ に相当 //

POSIX仕様から(強調を追加):

3.267パス名

ファイルを識別するために使用される文字列。POSIX.1-2008のコンテキストでは、パス名は終端のnullバイトを含めて{PATH_MAX}バイトに制限される場合があります。オプションの開始<slash> 文字の後に、文字で区切られた0個以上のファイル名が続きます<slash> 。パス名には、オプションで1つ以上の末尾<slash>文字を含めることができます 。先行する2 文字だけの場合を除いて、連続する複数の<slash>文字は1と同じであると見なされます。<slash><slash>

そして

4.12パス名の解決

...
単一で構成されるパス名<slash>は、プロセスのルートディレクトリに解決されます。nullパス名は正常に解決されません。パス名が2つの連続する<slash>文字で始まる場合、先頭の<slash>文字に続く最初のコンポーネントは実装定義の方法で解釈される場合がありますが、先頭の3 文字以上は<slash>単一の<slash> 文字として扱われます。

例外(cygwinとディレクトリ)の良い議論については、Linuxは複数の連続したパス区切り文字(/ home //// username /// file)をどのように処理するのかを参照してください。


4

ディレクトリには複数のスラッシュを追加できますが、何も変更されません。

たとえば、次の3つのコマンドはすべて同じことを行います。
cd /home
cd /home/
cd /home//

これらのいずれかを実行すると、現在の作業ディレクトリが/ homeに設定されます(で確認pwd)。

私は推測し、あなたのためにプロンプトを構成していることをスマート何かを、あなたが予期しない動作に走ったことを。いつ何を手に入れますecho $PS1か?

それを説明するかもしれないhttps://unix.stackexchange.com/のコメントへのリンク


OSXのbashでのPS1は「\ h:\ W \ u \ $」であり、私もこの奇妙な動作をしています。/および///および////および/////はすべて/として表示されますが、2つのスラッシュの特殊なケースは2つのスラッシュとして表示されます。
Sparr 2013年

Ubuntu 12.10で\ u @ \ h:\ w(<b> u </ b> ser at <b> h </ b> ost、<b> w </ b> orking dir)を入手しましたが、失敗しました問題を再現します。
ヘネス

いいえ、どんな場合でもpwdをチェックするときは常に//取得します。エコー$ PS1の場合:\ [\ e] 0; \ u @ \ h:\ w \ a \] $ {debian_chroot:+($ debian_chroot)} \ u @ \ h:\ w \ $
Dimitris Theodoridis

PS1を手動で設定しただけで、2つのスラッシュでそれを再現できません。変だ。1、3、4ではありません。2でのみです。これを説明するのに途方に暮れています。
Hennes

多分unix.stackexchangeからのこのコメントが答えです: Windows POSIX compat APIも// remote / ...をUNCパス\\ remote \ ...形式と同じように扱うと思います。–スティーブンP '20
ヘネス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.