5

私がこの質問をしている理由は次のとおりです。私は多くのbashおよびPerlスクリプトを作成しており、2つのパスを頻繁に連結する必要があることに気づきました。このようなものが典型的です:

my $prefix = "/home/user/";
my $suffix = "/mystuff";
...
chdir $prefix.$suffix;

問題は、接頭辞の最後にスラッシュを付けたのか、接尾辞の最初にスラッシュを付けたのかを常に覚えていないことです。したがって、上記の例のように、誤って2つのスラッシュを連結する可能性があります。

したがって、私の主な質問は、2つの連続したスラッシュが問題を引き起こすかどうかとその理由です。しかしまた、プログラマーはこれについての慣習を持っていますか?他の人が書いたコードでは、ディレクトリ名は常にスラッシュで終わりますか?私が従うことができるいくつかの一貫したルールがあればいいのにと思います。

4

2 に答える 2

5

Unixシェルとカーネルは、これと「/firstpart/./secondpart」のようなものをうまく処理しますが、通常、パス連結式の見栄えを良くするために、末尾のスラッシュを変数値の一部にしないでください。$ {firstpart} / $ {firstpart}${secondpart}ではなく${secondpart}

Linuxのスクリプトでは、readlinkコマンドラインツールを使用してファイル名を正規化できます。

于 2012-11-05T23:12:24.817 に答える
5

それは完全に大丈夫です。繰り返されるスラッシュはUnixシステムでは1つとして扱われるため、常に1つ追加してください。

my $prefix = "/home/user";  # Or "/home/user/"
my $suffix = "mystuff";
my $dir = "$prefix/$suffix";

ただし、何らかの理由で正規化されたパスが必要な場合(たとえば、ユーザーに表示される場合)、次を使用できます。

use Path::Class qw( dir );
my $prefix = dir("/home/user");  # Or "/home/user/"
my $dir = $prefix->subdir($suffix);
say $dir;

で開始するか/home/user/home/user/またはでさえ///home///user///、最終的には次のようになります。

/home/user/mystuff
于 2012-11-05T23:17:17.190 に答える