首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Bash中,为什么` `cd //`工作(并等于` `cd /`)?

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

Stack Overflow用户
提问于 2015-07-28 15:01:37
回答 1查看 85关注 0票数 2

众所周知,Bash/终端中的cd /将您带到根目录,而不管您以前在哪里:

代码语言:javascript
复制
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 //带您到目录//,它与根目录相同,但仍然被描述为//

代码语言:javascript
复制
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 //带您到//

代码语言:javascript
复制
brian@brian-linux:/$ cd ///
brian@brian-linux:/$ cd //
brian@brian-linux://$ 
EN

回答 1

Stack Overflow用户

发布于 2015-07-28 15:04:23

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

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

代码语言:javascript
复制
get_project_root() {
    echo "/the/project/root/"
}

get_project_data_subdirectory() {
    echo "data"
}

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

代码语言:javascript
复制
project_root=$(get_project_root)
data_directory=$(get_project_data_directory)

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

现在,cd命令实际运行:

代码语言:javascript
复制
cd /the/project/root//data

因为我在两个变量之间添加了一个/。我这么做是因为我可能不知道这个函数是否会返回一个尾随的/,它不需要返回,有些函数可能没有。事实上,您可以有任意数量的斜杠,这意味着您可以将它们添加到安全的位置,而不必担心会破坏命令。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31680127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档