Unix如何读取带有两个连续斜杠的路径名?(例如/ home/user // mystuff)

Haz*_*oke 5 unix filesystems scripting perl

这就是我提出这个问题的原因:我写了很多bash和Perl脚本,我发现自己必须经常连接两个路径.像这样的东西是典型的:

my $prefix = "/home/user/";
my $suffix = "/mystuff";
...
chdir $prefix.$suffix;
Run Code Online (Sandbox Code Playgroud)

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

所以我的主要问题是两个连续斜线是否会导致任何问题以及原因.但是,程序员也有这样的约定吗?在其他人编写的代码中,目录名是否总是以斜杠结尾?如果有一些我可以遵循的一致规则会很好.

bob*_*bah 5

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

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


ike*_*ami 5

这很好.Unix系统将重复的斜杠视为一个斜杠,因此请务必添加一个斜杠.

my $prefix = "/home/user";  # Or "/home/user/"
my $suffix = "mystuff";
my $dir = "$prefix/$suffix";
Run Code Online (Sandbox Code Playgroud)

但是如果您因任何原因想要一个标准化的路径(例如,它将显示给用户),您可以使用:

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

无论您是从最开始/home/user,/home/user/还是///home///user///最终:

/home/user/mystuff
Run Code Online (Sandbox Code Playgroud)