5

这就是我问这个问题的原因:我写了很多 bash 和 Perl 脚本,我发现自己不得不经常连接两条路径。这样的事情很典型:

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

问题是我并不总是记得我是否在前缀的末尾放了一个斜杠,或者我是否在后缀的开头放了一个斜杠。所以我可能会不小心将两个斜杠连接在一起,就像上面的例子一样。

所以我的主要问题是两个连续的斜线是否会导致任何问题以及为什么。但是,程序员是否对此有约定?在其他人编写的代码中,目录名称是否总是以斜杠结尾?如果有一些我可以遵循的一致规则,那就太好了。

4

2 回答 2

5

Unix shell 和内核很乐意处理这个问题,以及诸如“/firstpart/./secondpart”之类的东西,但通常你不会将尾部斜杠作为变量值的一部分来使路径连接表达式看起来更好:${firstpart}/ ${secondpart}而不是${firstpart}${secondpart}

在 Linux 上的脚本中,readlink命令行工具可用于规范文件名。

于 2012-11-05T23:12:24.817 回答
5

完全没问题。重复的斜杠被 Unix 系统视为一个,所以总是加一个。

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 回答