Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash中的双斜杠?_Linux_Bash - Fatal编程技术网

Linux Bash中的双斜杠?

Linux Bash中的双斜杠?,linux,bash,Linux,Bash,为什么bash控制台接受“/bin//bash”而不是“/bin/bash”?路径“/bin//bash”不存在,但当我输入双斜杠时,将打开一个新的bash会话。这是open syscall完成的文件解析的结果。。open调用分配一个文件描述符,然后使用与文件系统相关的调用解析路径组件--/bin///bash也将执行您显示的操作。这是因为POSIX规则定义了一个或多个连续的/字符来分隔有效的路径名。编写bash的人都知道这一点,因此fnmatch的行为方式与标准所说的相同: 见: 多个连续的字

为什么bash控制台接受“/bin//bash”而不是“/bin/bash”?路径“/bin//bash”不存在,但当我输入双斜杠时,将打开一个新的bash会话。

这是open syscall完成的文件解析的结果。。open调用分配一个文件描述符,然后使用与文件系统相关的调用解析路径组件--
/bin///bash
也将执行您显示的操作。这是因为POSIX规则定义了一个或多个连续的
/
字符来分隔有效的路径名。编写bash的人都知道这一点,因此
fnmatch
的行为方式与标准所说的相同:

见:

多个连续的
字符被认为是同一个字符
,只有两个前导字符除外


那么,问题是什么?不管你用了多少斜杠,我投票将这个问题作为主题外的问题来结束,因为它与以前在不同的StackExchange站点上提出和回答的问题是重复的:而且,这不是特定于bash的行为——它适用于所有UNIX应用程序,使标记有点偏离基础。(也就是说,POSIX允许在路径以
//
开头的情况下执行定义的行为;因此,
//bin/bash
可以执行与
/bin/bash
不同的操作;但是,很少有系统实现这样的扩展)。您可以将一个包含多个
/
的路径作为分隔符传递给
open()
系统调用,因此即使fnmatch()未被使用,此行为仍将存在,这使得调用它成为使用fnmatch()的“结果”有点可疑。我相信bash使用fnmatch。glob对其他shell和bash也做类似的工作那么open使用什么来将路径名解析为文件inode号呢?这是您真正的问题/重点。我不知道。我认为它依赖于文件系统(因此是驱动程序)。ftw、nftw、scandir和其他函数也读取目录。它们调用什么?是的——open()系统调用由文件系统实现;文件系统的行为是由POSIX指定的。实际上——如果
fnmatch()
在返回结果之前从文件名中去掉额外的斜杠,它将破坏像AFS这样的文件系统,因为双斜杠有特殊的意义(POSIX允许这样做)。FWIW:@charlesduffy我没有提到去掉字符。我只是说它的行为符合POSIX标准。对不起,有什么困惑。