我在终端上工作时,拼错了 while cd
to root ( /
)。我无意中输入了以下内容,//
然后在终端中看到:
root@weblocalhost://#
当我输入时pwd
,我得到了响应//
,但是当我输入时,我得到了与目录ls -s
中相同的列表。/
当您输入超过 2 时,即///
您会得到:
root@weblocalhost:/#
除 2 外始终/
为 1。有什么区别吗?//
用途是什么?
答案1
/
相当于//
从POSIX 规范(强调添加):
3.267 路径名
用于标识文件的字符串。在 POSIX.1-2008 上下文中,路径名可能限制为 {PATH_MAX} 个字节,包括终止空字节。它具有可选的开头
<slash>
字符,后跟零个或多个以<slash>
字符分隔的文件名。路径名可以可选地包含一个或多个尾随<slash>
字符。多个连续的<slash>
字符被视为与一个相同<slash>
,除非恰好有两个前导字符的情况<slash>
。
和:
4.12 路径名解析
...
由单个组成的路径名<slash>
应解析为进程的根目录。空路径名将无法成功解析。如果路径名以两个连续的<slash>
字符开头,则可以按照实现定义的方式解释前导<slash>
字符后面的第一个组件,但两个以上的前导<slash>
字符应被视为一个<slash>
字符。
有关异常(cygwin 和目录)的详细讨论,请参阅:linux 如何处理多个连续的路径分隔符(/home////username///file)?
答案2
您可以在目录中添加多个斜杠,这不会改变任何内容。例如,以下三个命令都执行相同的操作:
cd /home
cd /home/
cd /home//
完成上述任何一项后,我的当前工作目录将设置为 /home(使用 检查pwd
)。
我猜测您的提示已配置为做些聪明的事并且您遇到了意料之外的行为。当您 时,您会得到什么echo $PS1
?
查看unix.stackexchange.com 上的此评论这或许可以解释这一点。