在Bash中,为什么`cd //`工作(并且等于`cd /`)?

时间:2015-07-28 15:01:38

标签: linux bash

众所周知,无论您以前在哪里,Bash / terminal中的cd /都会将您带到根目录:

brian@brian-linux:~/redis-3.0.3$ cd /
brian@brian-linux:/$ pwd
/
brian@brian-linux:/$ ls
bin    dev         initrd.img.old  libx32      opt   sbin  usr
boot   etc         lib             lost+found  proc  srv   var
cdrom  home        lib32           media       root  sys   vmlinuz
data   initrd.img  lib64           mnt         run   tmp   vmlinuz.old
brian@brian-linux:/$ 

我今天偶然发现了一个有趣的发现:

在Bash中,cd //会将您带到目录//,该目录与根目录相同,但仍被描述为//

brian@brian-linux:~/redis-3.0.3$ cd //
brian@brian-linux://$ ls
bin    dev         initrd.img.old  libx32      opt   sbin  usr
boot   etc         lib             lost+found  proc  srv   var
cdrom  home        lib32           media       root  sys   vmlinuz
data   initrd.img  lib64           mnt         run   tmp   vmlinuz.old
brian@brian-linux://$ pwd
//

这里发生了什么,为什么会这样呢?

还值得注意的是,cd ///或任何数量大于2的/会将您带到根目录/。但是,从根目录,cd //会将您带到//

brian@brian-linux:/$ cd ///
brian@brian-linux:/$ cd //
brian@brian-linux://$ 

1 个答案:

答案 0 :(得分:1)

您可以在文件路径中包含任意数量的//this/file/path完全等同于/this//file/////path

我不确定这是否是原因,但这意味着您在自动生成路径时不太可能出错。例如:

get_project_root() {
    echo "/the/project/root/"
}

get_project_data_subdirectory() {
    echo "data"
}

如果我想将cd这些函数用于项目的data目录,我可以这样做:

project_root=$(get_project_root)
data_directory=$(get_project_data_directory)

cd "${project_root}/${data_directory}"

现在cd命令实际运行了:

cd /the/project/root//data

因为我在2个变量之间添加了/。我这样做是因为我可能不知道该函数是否会返回尾随/,它不会需要而某些函数可能不会。您可以使用任意数量的斜杠这一事实意味着您可以将其添加为安全而不必担心违反命令。