ターミナルで作業していたとき、while cd
to root ( /
) のスペルを間違えました。誤って次のように入力し//
、ターミナルに入りました:
root@weblocalhost://#
と入力するとpwd
応答が返されます//
が、と入力するとディレクトリls -s
と同じリストが返されます/
。
2 個以上入力すると、次のように///
なります。
root@weblocalhost:/#
/
2 を除いて常に 1 です。何か違いがありますか、また何の//
ためですか?
答え1
/
は以下と同等である//
からPOSIX仕様(強調追加):
3.267 パス名
ファイルを識別するために使用される文字列。POSIX.1-2008 のコンテキストでは、パス名は終端のヌル バイトを含めて {PATH_MAX} バイトに制限される場合があります。パス名にはオプションで開始
<slash>
文字があり、その後に<slash>
文字で区切られた 0 個以上のファイル名が続きます。パス名にはオプションで 1 つ以上の末尾<slash>
文字を含めることができます。先頭の文字がちょうど 2 文字である場合を除き、連続する複数の<slash>
文字は 1 つの文字と同じとみなされます。<slash>
<slash>
そして:
4.12 パス名の解決
...
単一のパス名は<slash>
プロセスのルート ディレクトリに解決されます。ヌル パス名は正常に解決されません。パス名が連続する 2 つの<slash>
文字で始まる場合、先頭の文字に続く最初のコンポーネント<slash>
は実装定義の方法で解釈されますが、先頭の<slash>
文字が 2 つを超える場合は 1 つの文字として扱われます<slash>
。
例外 (cygwin とディレクトリ) に関する詳しい説明については、以下を参照してください。Linux は複数の連続したパス区切り文字 (/home////username///file) をどのように処理しますか?
答え2
ディレクトリに複数のスラッシュを追加しても、何も変わりません。たとえば、次の 3 つのコマンドはすべて同じことを行います。
cd /home
cd /home/
cd /home//
これらのいずれかの後、現在の作業ディレクトリは /home に設定されます ( で確認してくださいpwd
)。
私推測プロンプトが設定されていることを確認してください賢いことをするそして、予期せぬ動作に遭遇したとします。その場合、何が得られますかecho $PS1
?
チェックunix.stackexchange.com のこのコメントそれがそれを説明できるかもしれない。