cd..
和cd ..
。
基本上,它们的作用是一样的。但是,谁、为什么想到要用空格或不带空格来改变它?为什么有空格,为什么 cd 和两个点之间没有空格?
C:\Windows\System32>cd..
和
[bla/www/something/something]#cd ..
两者都一样。为什么一个有空间,而另一个没有?
编辑:
这不是该问题的重复:。
答案1
在类 UNIX 系统中,shellsh
将您输入的内容拆分成单词,并将每个单词作为参数分别传递给第一个单词引用的程序或内置命令(命令名称本身是第零个参数)。简而言之,单词在每个空格处拆分。因此,
cd ..
是两个词,但是
cd..
只有一个。在 UNIX 上没有命名的命令cd..
,因此后者失败。前者使用cd
单个参数调用..
,更改一个目录。举一个更复杂的例子,
echo foo bar baz quux
被解析为四个单词echo
、foo
、bar
、baz
和 ,quux
然后将其作为参数传递给echo
命令。中间的空白量会丢失,并将echo
打印
foo bar baz quux
因为它总是在每个参数之间插入一个空格。
在 Windows、DOS 和 CP/M 上,shellCOMMAND.COM
将命令名称解析为您输入内容的最长前缀,直到遇到空格或标点符号(这也是一种简化)。然后以您输入的整行作为参数执行命令。指针指示命令解释器认为命令名称结束的位置。COMMAND.COM
不会将命令行拆分为参数,如果程序希望这样做,它必须自己这样做。
例如,在cd ..
shell 中,它决定cd
命令名称,而命令名称恰好是内置命令。内置命令使用参数字符串cd ..
和前两个字符构成命令名称的信息来执行。同样,对于cd..
shell,它决定cd
命令名称并将其..
作为操作数名称传递。该cd
命令跳过命令名称,从空格中修剪其余部分,然后尝试切换到提到的目录。
同样地,
echo foo bar baz quux
shell以作为参数调用该echo
命令并及时打印echo foo bar baz quux
echo
foo bar baz quux
cd..
这就是为什么它可以在 DOS 上运行而在 UNIX 上却不行的原因。
两种设计都有其优点和缺点,但 UNIX 风格已占据了几乎所有系统,因为它更容易编程,因为只有一个程序(shell)需要知道如何将命令行拆分为单词,而不是每个程序都有自己的自制解决方案。