Jedesmal, wenn ein Kommando ausgeführt wird, werden die bereits beschriebenen Ersetzungen in dieser Reihenfolge durchgeführt:
Entwertung
Parameter-Ersetzung
Tilde-Ersetzung
Alias-Ersetzung
Dateinamen-Erzeugung
Ein- und Ausgabeumlenkung
Kommando-Ersetzung
Entspricht der Kommandoname dem Namen eines eingebauten Kommandos, dann wird dieses in der aktuellen POSIX-Shell ausgeführt. Als nächstes wird geprüft, ob der Kommandoname dem Namen einer benutzerdefinierten Funktion entspricht. Ist dies der Fall, dann werden die Stellungsparameter gesichert und auf die Werte der Argumente des Funktionsaufrufs gesetzt. Wenn die Funktion beendet ist oder das eingebaute Kommando return ausgeführt wurde, werden die Stellungsparameter wiederhergestellt und jeder in der Funktion für EXIT gesetzte trap ausgeführt. Der Exit-Wert ist der Wert des letzten Kommandos in der Funktion. Eine Funktion wird auch in der aktuellen POSIX-Shell ausgeführt. Ist ein Kommandoname nicht unter den eingebauten Kommandos oder den benutzerdefinierten Funktionen zu finden, dann wird ein Prozess erzeugt und versucht, das Kommando durch den Systemaufruf exec ausführen zu lassen.
Die Variable PATH definiert den Suchpfad für die Dateiverzeichnisse mit den Kommandos. Die einzelnen Verzeichnisse werden durch Doppelpunkt : getrennt. Der Standard-Suchpfad ist /usr/bin:. Damit sind, in dieser Reihenfolge, das Verzeichnis /usr/bin und das aktuelle Verzeichnis gemeint. Das aktuelle Verzeichnis kann durch einen Doppelpunkt am Anfang oder Ende oder durch zwei (oder mehr) aufeinanderfolgende Doppelpunkte angegeben werden. Der Suchpfad wird nicht benutzt, wenn der Kommandoname einen Schrägstrich / enthält. Ohne / im Kommandonamen wird jedes Verzeichnis im Suchpfad nach einer ausführbaren Datei durchsucht. Existiert für die Datei das Ausführrecht und ist sie eine einfache Datei ohne das a.out-Format, dann wird angenommen, dass sie eine Shell-Prozedur enthält. In diesem Fall wird eine Subshell zum Lesen der Datei aufgerufen. Alle nicht exportierten Alias-Variablen, Funktionen und Umgebungsvariablen werden nicht in die Subshell kopiert. Ein geklammertes Kommando wird in einer Subshell ohne Löschung der nicht exportierten Teile ausgeführt.