众所周知,无论您以前在哪里,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://$
答案 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个变量之间添加了/
。我这样做是因为我可能不知道该函数是否会返回尾随/
,它不会需要而某些函数可能不会。您可以使用任意数量的斜杠这一事实意味着您可以将其添加为安全而不必担心违反命令。