Auf UNIX-ähnlichen Systemen sh
trennt die Shell das, was Sie eingeben, in Wörter und übergibt jedes Wort separat als Argument an das Programm oder den eingebauten Befehl, auf den das erste Wort verweist (der Befehlsname selbst ist das nullte Argument). Vereinfacht werden die Wörter in jeden Raum aufgeteilt. Somit,
cd ..
ist zwei Wörter aber
cd..
ist nur einer. Unter cd..
UNIX gibt es keinen Befehl, daher schlägt letzterer fehl. Ersteres ruft cd
mit dem einzigen Argument auf ..
und ändert ein Verzeichnis nach oben. Für ein komplizierteres Beispiel
echo foo bar baz quux
wird in die vier Wörter geparst echo
, foo
, bar
, baz
, und quux
die dann zu dem übergebenen echo
Befehl als Argumente. Die Menge an Leerzeichen dazwischen ist verloren und echo
wird gedruckt
foo bar baz quux
da es immer ein einzelnes Leerzeichen zwischen jedes Argument einfügt.
Unter Windows, DOS und CP / M COMMAND.COM
analysiert die Shell den Befehlsnamen als das längste Präfix Ihrer Eingabe, bis ein Leerzeichen oder ein Interpunktionszeichen erreicht wird (auch dies ist eine Vereinfachung). Dann wird der Befehl mit der gesamten Zeile ausgeführt, die Sie als Argument eingegeben haben. Ein Zeiger zeigt an, wo der Befehlsinterpreter den Befehlsnamen für beendet hält. COMMAND.COM
teilt die Befehlszeile nicht in Argumente auf. Wenn das Programm dies wünscht, muss es dies selbst tun.
Zum Beispiel cd ..
entscheidet in der Shell, dass dies cd
der Befehlsname ist, der zufällig ein integrierter Befehl ist. Der eingebaute Befehl wird mit der Argumentzeichenfolge ausgeführt cd ..
und die Information, dass die ersten beiden Zeichen den Befehlsnamen bilden. In ähnlicher Weise cd..
entscheidet die Shell, dass dies cd
der Befehlsname ist und ..
als Operandenname übergeben wird. Der cd
Befehl überspringt den Befehlsnamen, schneidet den Rest aus Leerzeichen ab und versucht dann, in das angegebene Verzeichnis zu wechseln.
Ähnlich für
echo foo bar baz quux
Die Shell ruft den echo
Befehl mit echo foo bar baz quux
den Argumenten auf und echo
druckt ordnungsgemäß
foo bar baz quux
Dies ist der Grund, warum cd..
in DOS gearbeitet wird, aber nicht unter UNIX.
Beide Entwürfe haben ihre Vor- und Nachteile, obwohl der UNIX-Stil fast alle Systeme übernommen hat, da es viel einfacher ist, dagegen zu programmieren, da nur ein Programm (die Shell) wissen muss, wie eine Befehlszeile im Gegensatz zu jedem Programm in Wörter aufgeteilt werden muss Programm mit einer eigenen hausgemachten Lösung.