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.