从我有限的研究看来,在 bash 中,全局模式后面的任何多个斜杠都会被截断,如下所示:
echo ////[h]ome////user////Desktop////test////
# outputs ////home/user/Desktop/test/
echo ////home////user////Desktop////tes[t]////
# outputs ////home////user////Desktop////test/
这个结论正确吗?这种行为有定义吗?如果是的话,在哪里?它在不同的 shell 之间共享吗?有什么相关性吗?
我已经阅读了 bash 手册,但找不到任何关于此的内容,尽管我可能错过了一些东西。我知道这些符号之间没有语义差异(除了前导双斜杠的例外),只是不知道这种行为是否是有意的或有目的的。
编辑:所描述的行为发生在 Ubuntu 上的默认 bash 中。Korn shell ( /usr/bin/sh
) 没有截断任何斜杠。
编辑2:只是为了澄清:
- 我不是问Linux如何处理多个斜杠,很明显,除了前导双斜杠异常之外的多个斜杠没有语义意义,可能会被截断。
- 我不是在问这种行为如何影响 shell 管道中的任何内容 - 显然不会,除了如果全局扩展作为参数传递下去,它只是有更多的斜杠。
- 我不是问为什么这种情况会发生在具有 glob 模式的路径上 - 很明显,无论处理 glob 扩展的任何代码也会截断 glob 后面的斜杠。
- 我特别想问这种行为是否是定义的,是否在不同的 shell 之间共享,是有意的还是有目的的。