有什么区别
cd abc/xyz/
和
cd abc/xyz
/
结尾的重要性是什么?哪种使用方法才是正确的?因为两种方法似乎都有效。
答案1
您提供的示例中的差异可能很小cd
,但mv
归档时请务必小心。
例如,如果你想移动几个文件到另一个目录,你可以输入
for i in *.mp3 ; do mv $i dest ; done
忘记末尾的斜线,然后每个移动的文件将覆盖名为 dest
(第一个文件实际上将创造dest
该文件不存在时,将调用该文件的名称)。结果是,除最后一个文件之外的所有文件都被最后一个文件覆盖,现在该文件名为dest
。
到移动到目录,必须指定尾随的 /
for i in *.mp3 ; do mv $i dest/ ; done
斜线的一个副作用是,如果目录不存在,您将收到一条错误消息。
答案2
cd abc/xyz
是正确的,因为“abc/xyz”指的是'“abc”目录中的“xyz”实体'. 当你输入
cd abc/xyz/
它指的是 '“abc”目录中“xyz”目录中的“”实体'。“”(空字符串)实体会自动转换为“。”,即“当前”目录,在本例中为“xyz”目录。所以一切都归结为同一件事。
(有些人认为目录“必须“ 后面加了一个斜线。他们搞错了。)
答案3
cd abc/xyz/
是正确的做法。但如果你指定
cd abc/xyz
如果 cd 发现 xyz 是一个目录,它会假定尾随的 /
答案4
它们是相同的。文件名运算符将字符串视为“路径”,这是一种抽象,并且每个路径都与一个基本名称和另一个路径(目录名称)相关联。如果每个路径都是相同的字符串,则两个路径是相同的。例如:
cas var$ 目录名称 abc/xyz; 基本名称 abc/xyz 美国广播公司 坐标 cas var$ 目录名称 abc/xyz/; 基本名称 abc/xyz/ 美国广播公司 坐标
请注意,虽然有些程序(包括所有常用的 UNIX 实用程序)对字符串的处理方式相同,但如果它们是相同的路径,则还有一些程序会关心尾部斜杠。其中最重要的是rsync
。
后记 根据 POSIX 规范,路径名解析:
包含至少一个非斜杠字符并以一个或多个尾随斜杠结尾的路径名应被解析为在路径名后附加一个点字符('.')。