Linuxは複数の連続パス区切り文字(/home///username///files)をどのように処理しますか?

Linuxは複数の連続パス区切り文字(/home///username///files)をどのように処理しますか?

ファイルの場所をscpサブプロセスに渡すPythonスクリプトを作成しています。どちらも、/パスに ' が 2 つあるようにファイル名とパスを連結することもできる状況に置かれています。ファイル区切り文字が複数あっても bash は気にしないことを知っていますが、これをどのように変更できるか知りたいです。 bashは追加の/sを削除しましたか、それとも本当に重要ではありませんか?

この質問をする理由は、接続時に追加のコード行を確認する時間を節約できるからです/。あまりないことを知りながらも気になることもありますね。cd //usrパスに複数のsを使用することcd /usrが重要であることを意味する行(代わりに)を含むbashスクリプトがあります。/

答え1

複数のスラッシュが許可され、単一のスラッシュと同じです。 ~からシングルUnix仕様(バージョン4)基本定義§3.271パス名: "複数の連続スラッシュは1つのスラッシュと同じと見なされます。"

1つの例外があります。パス名が2つの連続したスラッシュ文字で始まる場合、前のスラッシュ文字の後の最初のコンポーネントは実装で定義された方法で解釈できます。 (引用する:基本定義§4.13パス名の確認)。 Linux自体ではこれを行いませんが、一部のアプリケーションでは実行でき、他のUNIXシステム(Cygwinなど)では実行します。

パス名の終わりが終わると、パス/名はディレクトリを参照します。存在する(POSIX 1003.1-2001(Single Unix v4)の基本定義§4.11パス名の確認、末尾は/末尾と同じです/.POSIX 1003.1-2008(Single Unix v4) 基本定義 §4.13/.存在しないディレクトリの場合(たとえば、mkdir foo/動作するが動作しないmkdir foo/.場合)と同等にするための要件を削除しました。理由変更)。

ディレクトリエントリで動作するプログラムの場合、fooディレクトリへのシンボリックリンクの場合、転送はfoo/プログラムがシンボリックリンクではなくディレクトリで機能するようにする方法です。

1これは、パス名解決(ファイルにアクセスするときなど)にのみ適用されます。ファイル名の操作は異なる場合があります。例えばbasenameそしてdirname末尾のスラッシュを無視します。

答え2

OSもそれについて気にしないようです。私はパスに//を使用して開くために直接システムコールを使用してCプログラムを試しました。

ただし、追加の内容を見つけるために文字列をスキャンする必要がないように、Pythonライブラリ関数os.path.normpathを使用して正規化できます。他の言語にも同様の機能があります。

http://docs.python.org/library/os.path.html#os.path.normpath

答え3

私が見たすべてのUnixシステムではSingleと同じ/ですが、Unix標準指定する

2つの連続したスラッシュで始まるパス名は実装定義の方法で解釈できますが、2つ以上の先行スラッシュを単一のスラッシュとして扱う必要があります。

したがって、システムに応じて特別に扱うこともできます。 (一部の以前のUnixバージョンでは、リモートファイルシステムへのアクセスに二重先行を使用していましたが、/まだ一部ではそうすることができます。)

答え4

違いなし。

複数のスラッシュは無視されます(効果はありません)。例:

ls -al //usr///////bin/sed

関連情報