在 Linux 中,我想输入 回到上一级目录cd ..
,结果输入了cd //
。出乎意料的是,并没有报错。而且提示符变成了username@hostname://$
。ls
这说明我已经在根目录了。
这是 shell 的一个错误还是功能?如果是功能,则是//
的别名/
吗?我的 shell 是 GNU bash,版本 4.1.5(1)-release (i686-linux-gnu)。
谢谢,并致以最诚挚的问候。
答案1
都可以考虑。
在 Linux 中,//
没有任何意义 - 多个连续的斜线会被折叠成一个,任何地方在路径中,包括开头。将目录更改为 会将//
您带入/
,正如运行readlink /proc/self/cwd
所提示的那样;同样,/usr//local///bin
会折叠为/usr/local/bin
。
然而,其他一些类 Unix 系统,例如 Cygwin 或旧的 Apollo Domain/OS,使用//
字首对于网络路径,例如//fileserver/path/to/data
。POSIX 也允许这样做。
由于各种原因,狂欢shell 会自行跟踪当前目录(除了操作系统提供的跟踪之外),并且它有代码可以防止初始项//
被折叠,以保持与此类系统的兼容性。“功能”是狂欢提供更直观的当前目录跟踪,例如,当cd
进入符号链接时,狂欢会显示你期望的路径,即使内核认为不是这样。“错误”在于狂欢//
即使在不使用它的系统上也允许。
答案2
答案3
这是一种功能。find
例如,如果您运行 shell 脚本并使用 ,则所有路径通常都以 ./ 为前缀。然后,如果您将其添加到实际路径上,它将变为 `/my/path/./appended/path,解析为 /my/path/appended/path。因此,如果我没有记错的话,// 会被解释为 /./,因此 /。如果您转到 /home/user//,您将最终进入 /home/user/,情况也是如此
答案4
它是一个功能,所有多个//将被替换为一个/
如果您有带路径的变量(如末尾的示例),它将非常有用。这样您的 cd 就不会出现任何错误,您也不必更改工作区变量。
MY_WORKSPACE=/home/你的用户名/工作区/ 我的新项目=$我的工作空间/我的项目/ cd $我的新项目
项目变量的完整内容是
/home/你的用户名/工作区//my_proj/