質問: linuxは複数の連続したパス区切り文字(/ home //// username /// file)をどのように処理しますか? 私はpythonスクリプトでファイルの場所をscpサブプロセスに渡すスクリプトを作成しています。それで問題ありませんが、パスとファイル名を連結して、パスに二重の '/があります。複数のファイル区切り記号があってもbashは気にしないことは知っていますが、それがどのように正確に修正されるのか疑問に思っています。余分な/sを取り除くbashですか?それとも本当に重要ではないのですか?連結中に余分な/sをチェックするために数行のコードを節約できるので、私は尋ねます。大した問題ではないことはわかっていますが、私も知りたいです。 cd //usrの代わりにcd /usrという行があるbashスクリプトがあります。これは、パスで複数の/sを使用することが重要である可能性があることを示唆しているようです
回答: 複数のスラッシュを使用でき、単一のスラッシュと同等です。 シングルunix仕様(バージョン4) 、 基本定義§3.271パス名 から:「複数の連続するスラッシュは1つのスラッシュと同じであると見なされます。」1つの例外があります。パス名が2つの連続する文字で始まる場合、先頭の文字に続く最初のコンポーネントは、実装定義の方法で解釈される場合があります。 (参照: 基本定義§4.13パス名の解決 )。 linux自体はこれを行いませんが、一部のアプリケーションは可能であり、他のunix系システムはそれを行います(cygwinなど)。パス名の末尾にある/は、パス名がディレクトリを参照するように強制します。 ( posix 1003.1-2001(single unix v4)base definition§4.11pathname resolution では、末尾の/は末尾の/.と同等です。 posix 1003.1- 2008(single unix v4)基本定義§4.1 存在しないディレクトリに対処するために、/.と同等にするための要件が削除されます(たとえば、mkdir foo/が機能する必要があるのに対し、mkdir foo/.はそうしません—変更については rationale を参照してください)。ディレクトリエントリに作用するプログラムの場合、fooがディレクトリへのシンボリックリンクである場合、foo/を渡すと、プログラムはシンボリックリンクではなくディレクトリに作用します。1 これはパス名解決にのみ適用されることに注意してください。つまり、ファイルにアクセスする場合です。ファイル名の操作が異なる場合があります。たとえば、 basename および dirname は、末尾のスラッシュを無視します。