We gebruiken hier Bash als voorbeeld, maar andere shells hebben soortgelijke functionaliteit. Bash kent drie concepten voor history expansion: event designators, word designators en modifiers.

Met een event designator verwijs je naar een specifiek commando in de geschiedenis. Met !n verwijs je bijvoorbeeld naar commando n (dit is een reden om het volgnummer van het huidige commando te tonen in je shell prompt, wat je doet met de code \!), met !-n naar het commando n regels terug. De aanduiding !! is een synoniem voor !-1 en verwijst dus naar het vorige commando. Was je bij het vorige commando vergeten dat je root-privileges nodig, dan voert een eenvoudig sudo !! dit commando opnieuw uit, ditmaal met sudo. Verder geeft !string het recentste commando dat begint met string en !?string het recentste commando dat string bevat. Met ^string1^string2^ voer je het laatste commando uit, maar vervang je daarin het eerste voorkomen van string1 door string2.

Met een optionele word designator neem je een onderdeel uit een commando dat je met een event designator geselecteerd hebt. Daarvoor vul je de event designator aan met een : en daarna de word designator. 0 selecteert het 0-de woord, dus de naam van het commando, terwijl n het n-de woord selecteert. ^ selecteert het eerste argument (dus woord 1), terwijl $ het laatste argument selecteert. Je kunt ook een bereik opgeven, zoals m-n dat woorden m tot en met n selecteert, of * dat alle woorden behalve het 0-de selecteert, dus alle argumenten van het commando. Als je een word designator gebruikt zonder event designator (dus gewoon met ! dat het begin van een history substitution aanduidt), dan gebeurt de selectie op het vorige commando. Bovendien kun je bij een aantal word designators de : weglaten. Daarom betekent !$ het laatste argument van het vorige commando en !* alle argumenten van het vorige commando.

Na de word designator kun je nog optioneel één of meerdere modifiers toevoegen, eveneens voorafgegaan door een :. Dit is bijvoorbeeld handig als je in het vorige commando meerdere voorkomens van een string wilt vervangen: met !!:gs/string1/string2/ is dit zo gebeurd. En met p toon je het commando dat geselecteerd wordt, wat handig is als je bijvoorbeeld alleen maar wilt weten wat het recentste commando is dat een bepaalde string bevat, maar dit niet wilt uitvoeren.

Voor meer event designators, word designators en modifiers verwijzen we je naar de Bash manual.

Bron: Techworld