Em sistemas semelhantes a UNIX, o shell sh separa o que você digita em palavras e passa cada palavra separadamente como um argumento para o programa ou comando interno referido pela primeira palavra (o nome do comando em si é o argumento zeroth ). Simplificado, as palavras são divididas em cada espaço. Assim,
cd ..
é duas palavras, mas
cd..
é apenas um. Não há nenhum comando chamado cd.. no UNIX, portanto, o último falha. O primeiro invoca cd com o único argumento .. , alterando um diretório para cima. Para um exemplo mais complicado,
echo foo bar baz quux
é analisado nas quatro palavras echo , foo , bar , baz e quux , que são então passadas para o comando echo como seus argumentos. A quantidade de espaçamento entre é perdida e echo será impresso
foo bar baz quux
como sempre insere um espaço em branco entre cada argumento.
No Windows, DOS e CP / M, o shell COMMAND.COM analisa o nome do comando como o prefixo mais longo do que você digitou até que um espaço ou pontuação seja atingido (isso também é uma simplificação). Então o comando é executado com a linha inteira que você digitou como argumento. Um ponteiro indica onde o interpretador de comandos acredita que o nome do comando terminou. COMMAND.COM não divide a linha de comando em argumentos, se o programa deseja que isso aconteça, tem que fazê-lo.
Por exemplo, em cd .. , o shell decide que cd é o nome do comando, que por acaso é um comando interno. O comando interno é executado com a string de argumento sendo cd .. e as informações de que os dois primeiros caracteres formam o nome do comando. Da mesma forma, para cd.. , o shell decide que cd é o nome do comando e passa .. como o nome do operando. O comando cd ignora o nome do comando, apara o restante do espaço em branco e, em seguida, tenta alterar para o diretório mencionado.
Da mesma forma,
echo foo bar baz quux
o shell invoca o comando echo com echo foo bar baz quux conforme os argumentos e echo imprime
foo bar baz quux
Esta é a razão pela qual cd.. funciona no DOS, mas não no UNIX.
Ambos os projetos têm seus prós e contras, embora o estilo UNIX tenha assumido quase todos os sistemas, pois é muito mais fácil programar contra, pois apenas um programa (o shell) precisa saber como dividir uma linha de comando em palavras como se opõe a todo programa que tenha sua própria solução caseira.