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 gesagt, werden Wörter auf jedem Feld aufgeteilt. Somit,
cd ..
ist zwei wörter aber
cd..
ist nur eine. Unter cd..
UNIX gibt es keinen benannten Befehl , daher schlägt letzterer fehl. Ersterer 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 Whitespace dazwischen geht verloren und echo
wird gedruckt
foo bar baz quux
da es immer ein einzelnes Leerzeichen zwischen jedem Argument einfügt.
Unter Windows, DOS und CP / M COMMAND.COM
analysiert die Shell den Befehlsnamen als das längste Präfix dessen, was Sie eingegeben haben, bis ein Leerzeichen oder eine Interpunktion erreicht ist (dies ist ebenfalls 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 glaubt, dass der Befehlsname beendet ist. COMMAND.COM
teilt die Kommandozeile 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 eingebauter Befehl ist. Der eingebaute Befehl wird mit dem Argument string ausgeführt cd ..
und der 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, entfernt den Rest aus dem Leerraum 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 gibt ihn echo
ordnungsgemäß aus
foo bar baz quux
Dies ist der Grund, warum es cd..
unter DOS, aber nicht unter UNIX funktioniert.
Beide Entwürfe haben ihre Vor- und Nachteile, obwohl der UNIX-Stil fast alle Systeme übernommen hat, da es viel einfacher ist, sie zu programmieren, da nur ein Programm (die Shell) wissen muss, wie man eine Befehlszeile in Wörter aufteilt, im Gegensatz zu jedem anderen Programm mit seiner eigenen hausgemachten Lösung.