ファイルの場所をscpサブプロセスに渡すPythonスクリプトに取り組んでいます。それはすべて問題ありませんが、二重の「/」が存在するように、パスをファイル名と連結してしまう可能性がある状況にあります。 パスで。複数のファイルセパレータがある場合、bashは気にしないことは知っていますが、それがどのように正確に修正されるのか疑問に思っています。余分な/を取り除くのはbashですか sまたはそれは本当に重要ではありませんか?
余分な/をチェックするために数行のコードを節約できるので、お願いします s連結中。大したことではないことは知っていますが、私も興味があります。 cd //usrという行のbashスクリプトがあります (cd /usrの代わりに )、これは、複数の/を使用することに意味がある可能性があることを意味しているようです パス内のs
承認された回答:
複数のスラッシュが許可されており、単一のスラッシュと同等です。 Single Unix Specification(バージョン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/を渡します は、プログラムをシンボリックリンクではなくディレクトリで動作させる方法です。
¹これはパス名の解決にのみ適用されることに注意してください。つまり、ファイルにアクセスする場合です。ファイル名の操作は異なる場合があります。例:basename およびdirname 末尾のスラッシュは無視してください。