【问题标题】:In Bash, why does `cd //` work (and equal `cd /`)? [duplicate]在 Bash 中,为什么 `cd //` 有效(并且等于 `cd /`)? [复制]
【发布时间】:2015-07-28 15:01:37
【问题描述】:

众所周知,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://$ 

【问题讨论】:

标签: linux bash


【解决方案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

因为我在两个变量之间添加了/。我这样做是因为我可能不知道该函数是否会返回尾随 /,它不需要并且某些函数可能不需要。您可以有任意数量的斜线这一事实意味着您可以添加它们以确保安全,而不必担心破坏命令。

【讨论】:

  • 双前导斜线实际上在技术上是不同的。
  • ...我已经看到了一些尊重这些差异的文件系统(即 AFS)。
  • 啊,我不知道。在我的系统上 cd // 与 cd /. 相同
  • 顺便说一句,你不能合法地从 shell 函数返回字符串;您可以在标准输出上发出它们,但这是不同的。
  • @CharlesDuffy 非常正确,我已经更改了代码。当我开始写答案时,我的目标不是 shell 代码,然后中途改变了主意。
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 2014-05-19
  • 2017-12-06
  • 2015-05-07
  • 1970-01-01
  • 2016-10-03
  • 2018-04-16
  • 1970-01-01
相关资源
最近更新 更多