Unix、「/」と「//」で始まるパスの違い

Unix、「/」と「//」で始まるパスの違い

unix / linuxでは、パス内の連続スラッシュは通常単一のスラッシュと同じです。例えば。

$ cd /home/shum
$ pwd
/home/shum
$ cd /home//shum
$ pwd
/home/shum
$ cd /home///shum
$ pwd
/home/shum

ただし、何らかの理由で絶対パスの先頭にある2つのスラッシュは特別に処理されます。例えば。

$ cd ////home
$ pwd
/home
$ cd ///
$ pwd
/
$ cd //
$ pwd
//
$ cd home//shum
$ pwd
//home/shum

パッチの異なる場所にある他の連続スラッシュは切り捨てられますが、最初の2つのスラッシュは、後でそれに関連するファイルシステムを参照してもそのまま残ります。

なぜこれですか? /...と//...の間に違いはありますか?

ベストアンサー1

ほとんどの場合、パスで繰り返されるスラッシュは単一のスラッシュと同じです。。この動作はPOSIXで要求され、ほとんどのアプリケーションがこれに従います。例外は、「2つの連続したスラッシュで始まるパス名は、実装で定義されている方法で解釈できます」と同じ///fooです/foo

ほとんどのユニスは、前に2つのスラッシュを使用して特別な操作を実行しません。特にLinuxはそうではありません。 Cygwinが行うこと://hostname/pathネットワークドライブ(SMB)にアクセスします。

実際、ここで見ているのは、Linuxが特別なことをするのではなく、//bashが現在のディレクトリを追跡することです。比較する:

$ bash -c 'cd //; pwd'
//
$ bash -c 'cd //; /bin/pwd'
/

Bashは予防措置を講じており、オペレーティングシステムはこれを//特別に処理して保存することができます。ダッシュも同じことをします。 Ksh と zsh は Linux で実行しても動作しません。 (確認していません)コンパイル時間設定があるようです。

おすすめ記事