 Einen wunderschönen guten Morgen im vollgefüllten blauen Salon der Gulaschprogrammiernacht Nr. 21 beim Frühstückstag um 10 Uhr und so viele Menschen, es ist sensationell. Für die, die den Fahrplan nicht genau gelesen haben, ja, es geht um Klammern, aber nicht um Runde. Das heißt, das ist kein Lisp-Talk. Möchte jemand jetzt noch den Saal verlassen? Nein, gut. Dann würde ich sagen, begrüßt bitte mit einem ganz großen Applaus den Martin Schulte mit geschweiften Klammern in der Bäsch. Ja, vielen Dank. Kurz zur Historie dieses Talks. Ich habe in den vergangenen Jahren, könnt ihr mich akustisch oder da gibt es irgendeine Rückkopplung jetzt nicht mehr. Ich habe immer mit großer Freude die Aufzeichnungen vom Leihra gesehen und da war ja immer dieses ewige Betteln, dass doch mal jemand anders auch einen Talk halten möge und da konnte ich dann auch nicht mehr widerstehen zumal. Ich große Teile schon fertig hatte. Kurz zu mir, ich wohne im Linnungshotel in Essen. Da gibt es auch ein paar Wohnungen und da arbeite ich auch frei beruflich als Trainer für die kurze Linnungsgrundlagen und Schellprogrammierung. Ja, worum soll es heute gehen? Ach so, wenn ihr Fragen habt, stellt sie gerne auch direkt. Ich wiederhole sie dann, weil ich denke dann immer, wenn am Ende so eine Frage kommt, wo ich denke, warum kam die nicht nach 10 Minuten und was hat derjenige, der jetzt die Frage stellt, in der Zwischenzeit verstehen können, also stellt sie direkt. Ich habe ja auch gehört, es gibt immer Präsente sozusagen für die, die Fragen stellen, habe ich auch gut aufgepasst und da habe ich was mitgebracht hier. Also für besonders gute Fragen. Ich weiß nicht, haben wir diese schöne Cap Süßatmin hier zu verleihen und noch ein paar andere Dinge. Also nutzt, macht reichlich gebraucht, die ist jetzt meine, aber da unten sind noch ein paar mehr drin. Also es gibt die auch in unbenutzt. Okay. Nee, zur S-Bar, das habe ich leider nicht dabei. Also soweit bin ich dann noch nicht in der Entwicklung geraten. So, ja, wir reden ja von der Schelle und es soll um die geschweiften Klammern geben. Es gibt ja auch die runden Klammern und die eckigen Klammern. Die eckigen Klammern kommen wir auch noch mal kurz zu sprechen gleich, zweimal sogar. Erstmal die runden Klammern, wenn man die so in eine Kommando-Zeile tippt, was passiert dann, was macht die Schelle damit, bevor sie die als Argumente an das Echo übergibt. Die Antwort lautet ja, viel zu kompliziert, sie macht gar nichts damit. Also das Echo, die geschweiften Klammern haben, so wenn sie so alleine stehen, Details dann im Laufe des Vortrags, die haben erstmal überhaupt keine besondere Bedeutung. Das Echo wird jetzt mit drei Argumenten aufgerufen, dann mich mit der geschweiften Klammer auf, mit dem Hallo und der geschweiften Klammer zu und entsprechend werden diese drei auch ausgegeben. Klassische Anwendung ist, wo hat man, wenn man beginnt mit Unix, mit der Schelle, mit Linux zu arbeiten, wo begegnen aus meiner Sicht beim ersten Mal einen die geschweiften Klammern, bei welchem Kommando, da gibt es nämlich eines, was praktisch die Tatsache, dass da erstmal gar nichts mit passiert ausnutzt. Genau, das ist das Feind. Da habe ich keins vorbereitet, dann machen wir das mal schnell. Wir suchen also ausgehend vom aktuellen Verzeichnis alle Dateien, deren Name mit GPN Stern beginnt und führen daraus mal auf dieser gefundenen Datei ein LS-L auf. Das Feind sucht jetzt, wenn es eine Datei gefunden hat, macht es ein LS-L und jetzt muss ja das Feind wissen, wo es dem LS-L den gefundenen Dateinamen übergeben will und das wird sozusagen dargestellt durch das Paar geschweifter Klammern. Das funktioniert nur, weil die Schelle dieses Paar geschweifter Klammern völlig in Ruhe lässt. Und dann müssen wir das noch abschließen hiermit und dann sehen wir, Moment, das sah jetzt noch nicht ganz richtig aus. Das habe ich noch nicht richtig gemacht, das scheint... Das ist ein Verzeichnis in der Note. Oh ja, ich war noch im falschen Verzeichnis. Ich wollte erst in dieses Verzeichnis wechseln und dann tut es das Beispiel auch. Er sucht jetzt in den Tiefen und dann gibt es in dem Verzeichnis Files eine Datei GPN 21 und auf dieser macht er dann das LS-L. Also an der Stelle ist das wichtig, ist das sozusagen ein Sonderzeichen für das Feind, aber die Schelle lässt ihre Finger davon. Man muss nicht zu wissen, dass man an der Stelle nicht über die Schelle nachdenken muss. Gut, so findet man das noch. Im Zusammenhang mit dem Dollarzeichen, das Dollarzeichen der Schelle wird ja verwendet, um praktisch Variabe zu de-referenzieren, um also den Inhalt aus Variablen rauszukommen. Ihr kennt das alle, was nehmen wir denn mal, ich nehme jetzt mal Karlsruhe, weil wir ja auch gerade hier sind. So, und wenn ich den Wert dieser Variablen ausgeben will, was mache ich dann, wenn ich ihn auf dem Bildschirm sehen will? Echt so doller Ort. Genau. Was empfiehlt sich eigentlich immer, also ich würde in meinem Grundlagenkurs immer sagen, schreibt es so nicht, was sollte man eigentlich immer dazuschreiben, ja? Das können wir noch gleich diskutieren, aber ja, so ein... Genau, also die doppelten Anführungszeichen darum um nämlich, dass die Waldkartexpansion und das Wörtsplitting, um also um die beiden Wörter jetzt in den Raum zu werfen, zu verhindern. Also macht, wenn ihr auf Variablenwerte zugreift in der Schelle und nicht genau wisst, was er tut, dann seid ihr in der Regel mit den doppelten Anführungszeichen auf der sichen Seite, ja? Ja, das macht einen Riesenunterschied, sehr gute Frage. Kannst du da schon mal die so ein bisschen trecken? Wir werden da gleich sozusagen... Also was passiert jetzt? Jetzt kriegen wir den Wert dieser Variablen angezeigt. Was passiert, wenn wir jetzt die Singlequots drum drin sitzen? Genau, jetzt kriegt man doller Ort als Ausgabe, weil innerhalb der einfachen Anführungsstriche alle Schell-Sonderzeichen bis auf das schließende Anführungszeichen ihre Bedeutung verlieren, also das ist wichtig. Gut, dann machen wir noch ein Beispiel. Gleich die Stern. Ich hoffe so. Jetzt machen wir mal echte doller Ort. Das war der. Jetzt machen wir das mit den doppelten Anführungsstrichen. Dann kommt die Stern raus. Und was passiert jetzt unangenehmerweise, wenn ich darum jetzt der Grund ist, habe ich doch erklärt, aber macht ja nichts. Was passiert jetzt, wenn ich die doppelnde Anführungsstriche weglasse? Ja, nicht Variablen, sondern Dateien. Der macht jetzt die sogenannte Wildcard-Expansion oder Globbing auch genannt. So, und was... Jetzt habe ich hier oben ja mal ein LS gemacht. Hier haben wir eine Datei namens die Clare A. Und jetzt wird, bevor das Echo aufgerufen wird, aus diesem doller Ort die Clare A. Dann gibt da die Clare A aus. Wenn wir eine zweite Datei hätten, Touch Dortmund, dann würde ich die beide bekommen. Manchmal will man das. In der Regel will man das heutzutage eher nicht mehr. Da gibt es dann andere Methoden. Es gibt ja immer so Dinge wie zum Beispiel User-Namen. Na ja, da weiß man, da kommen keine Sterne drin vor, wenn sie ordentlich sind. Ja, aber es kann ja verschiedene Gründe auch geben, dass Menschen auch Dateien anlegen, die ihm nicht ordentlich sind. Dann wird er ordentlich verstandiert. Auf einem vielleicht, einem Verzeichnis, wo man öffentlich Dateien anlegen kann. Und dann wird aufgrund dieser so gefundenen Datei dann eine Wildcard-Expansion gemacht. Und vielleicht was ganz anderes gelöscht. Das kann unangenehme Folgen haben, ja. So, jetzt kam eben ein Antwort... Bist du nur so, entweder kurz die Antwort, also den Zwischenruf zusammenzufassen oder mich mit Mikro hinkommen lassen. Eins von beiden. Ganz vergessen. Da gibt es eben noch die Anmerkung. Man kann hier auch, machen wir hier mal wieder die doppelten Anführungsstriche drum. Man kann, man muss aus meiner Sicht nicht die geschweiften Klammern drum machen. Da kommen sie jetzt gerade sozusagen zum Tragen. An der Stelle, es gibt Entwickler, Styleguides, die sagen, macht da immer die geschweiften Klammern zu, dass die begrenzen sozusagen den variablen Namen. Macht an der Stelle keinen Unterschied. Würde einen Unterschied machen, wenn wir sowas hier hätten. Ja. So. Was gibt da jetzt aus? Jetzt ist das für ihn die Variable hier. Ocht her, er sucht die Variable Ochter. Die ist nicht gesetzt. Das stört ihn nicht. Das setzt er also nichts ein und macht dann einen Stuben dahinter. Wenn wir jetzt so wie vorgeschlagen klammern, dann werden da raus. Ja, da habe ich eben noch was falsch gemacht. Ich hätte auch bei der Zuweisung hier eben tatsächlich schon Quotes verwenden müssen. So. Und dann... Ach so, ja. Natürlich, ja. So, so wollte ich es machen. Karlsruhe. So, und jetzt werden da draußen die Karlsruhe stuben. Mit einem E zu viel, aber das sei mir jetzt mal nachgesehen. Genau, also das... Man kann, wenn man kompliziertere Ausdrücke hat, also wenn man nicht ganz klar ist, wo der Variable Name endet, dann kann man sozusagen... Er geht genau so lange. Findet man häufig, wenn man ein Unterstrich braucht, mal als Beispiel... So, was mache ich jetzt hier? Ja, genau, ne? Wir rufen das Kommando Date auf in einem eigenen Prozess und sammeln das Ergebnis und packen es dann in die Variable D hinein. Genau. Und wenn ich jetzt zum Beispiel sage, Touch, Echo, Hallo, Größe, Dollar D. Back, so was hier in... Oder die Unterstrichback muss ich jetzt mal nehmen. Was ist dann passiert? Ja, dann kriegt er jetzt hier sowieso die Krise. Warum? Er weiß nicht, wo die Variable endet. Er findet hier keinen Wert, wenn ich das jetzt hier in die Klammern setze. Da nimmt er sauber den Wert dieser Variablen und wir haben eine Datei 2023... 2023 06 09 Unterstrichback. Also da ist es hilfreich, die Variable zu begrenzen, damit Schell weiß, wo der Variable Name aufhört. Es geht auch umgekehrt bei den Argumenten, den auch Positional Parametern genannt. Da hat man den umgekehrten Effekt. Ich versuche mal hier gerade dieses hier zu machen. Ja, was mache ich jetzt an mit dem Kommando? Da simuliere ich sozusagen, als hätte ich diese Schell, die ich da habe, aufgerufen mit den Argumenten 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Wenn ich also jetzt zum Beispiel in Dollar 0 reingucke, in Dollar 1 reingucke und dann ist in meinem ersten Parameter des Dringens 1 drin. Und wenn ich in Dollar 9 reingucke, dann steht da 9 drin und wenn ich in Dollar 10 reingucke, dann kriege ich 1 und die 0, weil jetzt sagt, arbeitet die Schell so, hier ist mein Positional Parameter zu Ende, dann setze ich den dahinter und was kann ich jetzt an der Stelle auch machen? Ich kann die geschweiften Klammern einwenden und das so zusammenfassen und dann kriege ich auch die 10 raus. Ist allerdings, glaube ich, eine sehr seltene Anwendung, denn Skripten, die dann explizit auf ihren 10. Parameter zugreifen, das ist vielleicht schon ein Zeichen, dass irgendwo vorher was nicht ganz richtig gelaufen ist. Ja, genau. Gut, aber das 1. ist durchaus häufiger, dass man den so regulären Variabeln haben, aber jetzt ein Dollar 22 zuzugreifen, halte ich dann schon für etwas seltener. Gut, aber richtig schön wird es jetzt eigentlich, wenn man erstmal den Schritt gegangen ist, man sollte natürlich auch hier jetzt immer brav die Double Quotes verwenden. Es sei denn, man möchte es explizit vermeiden, also man weiß, was man da tut an der Stelle und wir nehmen jetzt lieber nochmal meine Variable 8, da stand ja jetzt Karlsruhe drin und was jetzt die Shell kann, also die BESCH kann es und zum Teil einige der Dinger, also einige der Operationen, die ich jetzt vorstelle, die sind auch im POSIX-Standard definiert, andere nicht, also das ist so ein bisschen, ja, da müsste man gucken, ob wenn man sicher sein will, dass man POSIX-Kompatitel Skripten guckt, dann kann man die nicht alle verwenden. Was kann man jetzt hier machen? Wenn man die Dinger schweifend klammern, wo der Variablenname steht, noch weitere Operationen sozusagen einbauen. Zum Beispiel ein doppeltes Kerrit. Hoch, wie heißt das? Kerrit heißt Kerrit. Dach, Dach. So, was macht das? Nimmt den Variablen raus und verwandelt ihn komplett und das hätte man früher mit TR gemacht. Vorteil hier, das ist auch OTF-8-Kompatibel. Dass da, kommt man mit TR ja in der Regel nicht mehr weiter. Also das ist sehr schick. Genauso kann man eben, gut, wenn ich hätte hier nur eins von den genommen, dann hätte er jetzt, dann verwandelt er nur den erst, also er capitalized das, ich kann es eben auch mit Komma, einem Komma erster Buchstabe klein, zwei Komma alle Buchstaben klein. Ja, Harald? Ja, okay, du hast wahrscheinlich recht, ich bin aber nicht ganz sicher, also die Frage oder die Anmerkung vom Harald war, er verwandelt nur den ersten Buchstaben, wir können es ja letztendlich also, probieren was man so können, versuchen macht klug, und ja, die Anmerkung vom Harald war richtig, also er ändert nur den ersten Buchstaben in einen kleinen Buchstaben, wenn es doch kein kleinen Buchstabe war, tatsächlich. Okay, ja, also die Frage ist, was haben, probieren wir auch das aus, wir nehmen mal OTF gleich, da ist kein Bergisch Gladbach, ist tatsächlich ein Ort mit einem Leerzeichen in der Mitte, was passiert jetzt ist die Frage, und ich vermute mal, dass jetzt sozusagen, also wenn was alles in Großbuchstaben verwandeln, dann sollten was komplett in Großbuchstaben kriegen, und wenn wir nur den ersten in einen kleinen Buchstaben verwandeln, dann wird nur der erste in einen kleinen Buchstaben fallen. Die Frage ist aber auch, ist das dann ein typografisches großes Leerzeichen? Sorry, ich drolle hier, da hinten gab es eine sehr tolle Frage. Also die Frage ist, ob man da auch einen Pattern mitgeben kann, und jeden dritten Buchstaben in Großbuchstaben verwandeln kann, das ist damit nicht, also entweder komplett klein, komplett groß, den ersten und genau. Ja, oder für den Rest kann man das auch zerlegen, also die Frage ist, kann man das sozusagen schachteln, diese Operationen, ja, das muss man explizit tun, das ist nicht so, dass man, also diese Operationen, die kann man nicht wie Funktionsaufrufe schachteln, sondern da muss man erst das Ergebnis der Variablen zuweisen, und dann auf diese Variable nochmal anwenden. Ich habe zumindest keinen Weg gefunden, sollte das anders sein. Ja, das reicht jetzt hier mal kurz ab, damit du wieder zurückkommst. Wir erreichen für nächstes eine Pendel-Diskussion, ein Shell-Golf für Einsteiger mit Harald, Martin und mir auf der Bühne, und ihr werft uns dann einfach Fragen zu. Genau, so machen wir es. Gut, noch ein Beispiel hier, wo wir noch gerade Köln hier irgendwo, Köln. Ach so, was man auch häufig braucht, wir wollen von Ort, vom Zeichen Null, das ist jetzt mit dem Index Null basieren, die ersten drei Zeichen haben und dann hängen wir da mal das SCH, und dann kriegt man das Getränk raus, was man in Köln so gerne trinkt, also wir nehmen uns hier aus dem Wort Ort ab dem Zeichen Null die ersten drei Zeichen, und das ist dann der Wert des Ganzen, und das eben auch, hier sieht man es dann auch wieder, dass es funktioniert, eben auch UTF-8-Kompatibel. Ich glaube, darf ich eine Einladung? Ja. Ja, dann geht es vom Ende aus, ja, genau. Das geht auch. Ja, und da gibt es jetzt ganz viele Operationen, ich lasse die nächste mal weg, da kann man sagen, nehmen von hinten alles, was du du musst, das wird kompliziert. Gut, aber wir müssen mal ein bisschen Zeit einholen. Kurz noch vielleicht ein Beispiel hier, was es noch schönes gibt, die associativen Race habe ich ja sozusagen erwähnt. Das hier mal ein Statement, was ein associatives ein associatives Ray deklariert. Wir haben das Ray Einwohner, das muss man tatsächlich auch deklarieren, sonst muss man variablen in der Shell nicht deklarieren, und jetzt sage ich hier, ich habe zu dem Key Berlin, habe ich den Wert und so weiter und so weiter und so weiter. Ich sorge mir das mal hier in meine Shell damit ich das Statement ausgeführt habe. Ja, und dann sind da so erstmal so die primitive Operation Echo Einwohner von Hamburg. Ja, und jetzt ist deine Antwort richtig. Jetzt brauche ich tatsächlich die geschweiften Klammern, weil er sonst nicht erkennt, dass das Hamburg der Erreizugriff auf diese Variable ist, sonst würde das Schreiben Einwohner unter Hamburg irgendwie. Und jetzt kriegen wir halt diese Zahl dann daraus. Und da gibt es auch noch ein paar niedliche Operationen. Ach so, ja, hast du recht für so viel Zeit muss sein. So, machen wir es falsch. Wir greifen jetzt hier auf eine Variable Einwohner zu, die nicht gesetzt ist. Da macht er dann den leeren String Hamburg-Ecke-Geklammer zu dahinter. Okay, so, man kann nur um das nochmal kurz anzureißen, man kann auf alle Werte eines Erreis zugreifen, indem man hier die als Index den Klammeraffen verwendet. Da sollte man jetzt spätestens jetzt wirklich auch auf die Double Quotes gehen. Jetzt kriegen wir alle Werte zurück. Wir können uns auch alle Kies geben lassen. Ja, natürlich so nicht. So, da sind die Kies in dem Array. Und was können wir noch machen? Wir können uns noch die Länge dieses, also wie viele Elemente gibt es in diesem Array anzeigen lassen. Okay. Ach so, Enter. Ja, meine Enter-Taste klemmt manchmal etwas. Gut. Das soll es jetzt erst mal gewesen sein. Also, da lohnt es sich wirklich mal die Handbuchseite zu gucken, bevor man da mit TR und irgendwelchen anderen Programmen anfängt, die es meistens auch dann nicht so gut tun und die natürlich performensmäßig auch ein Problem gegenüber so einem waschellen internen Funktion haben, da mal umgucken, was es da alles Schönes gibt. Also, die Handbuch, also Mann-Bash, man findet es jetzt nach 2,2% zeigen. Die Mann-Bash ist lang. Genau, also Mann-Bash, ich lese auch nicht die Mann-Bash, sondern ich gucke mir lieber die HTML-Seite bei genug.org an. Aber ansonsten... Aber da, wenn man weiß, wonach man suchen muss, nach 2,2, da kommt noch 2 Backflasche dazu. Da war noch eine Frage. Also, die assoziativen Arrays sind das mit Sicherheit nicht. Bei den anderen Operationen will ich mich jetzt nicht so weit aus dem Fenster lehnen. Ich meine aber auch schon da... Aber da muss man einfach mal nachgucken, wenn man wirklich... Das habe ich nicht so... Ja, auf dem Schirm. Du könntest einen Talk für nächstes Jahr vorbereiten, dass diese Frage beantwortet und erklärt, was POSIX Standard ist und wie es sich um die POSIX Standard ist und was da nicht drin ist. Und Knu und... So, jetzt kommen wir zu... Also, das war jetzt das Thema. Die geschweiften Klammern im Zusammenhang praktisch mit dem Dollarzeichen. Wir holen den Wert aus einer Variablen raus, begrenzen den Variablennamen einerseits und verknüpfen das noch potenziell mit anderen Operationen. Also, wirklich gute Features, die einem das Leben leichter machen können. Das ist das Thema. Wir legen ja ganz gut in der Zeit zu meiner Überraschung. Ist die sogenannte Brace Expansion. Erstes Beispiel. Echo... So, jetzt setzen wir das hier sozusagen mal in geschweifte Klammern und... Karlsruhe, wo kommst du noch her? Wo kommst du noch her, Harald? Jetzt haben wir Kübingen. Gut. Nee, ach, geil. An der Stelle ist es ohne Beweiskraft sozusagen. So, was passiert jetzt? Wir haben jetzt hier ein paar geschweifter Klammern und in diesem paar geschweifter Klammern, da steht etwas im Gegensatz zum Feind, eben wo das leer war. Also, da muss man jetzt... So, jetzt passiert die sogenannte Brace Expansion. Er läuft jetzt sozusagen alle Elemente, alle Komma getrennten Elemente in diesen geschweiften Klammern durch, also Harald und Martin und kombiniert sie mit dem Rest. Machen wir erstmal hier den Schein, weil den Rest noch einmal ab. Der Rest ist in dem Fall nur ein Unterstrich. Es kommt also raus Haraldunterstrich und Martinunterstrich. Beides als ein einzelnes Argument. Ja, und jetzt ist die Frage natürlich wieder ans Publikum gedacht. Was passiert, wenn ich das jetzt so schreibe? Ja. Genau, genau das Wort, was ein Mathematiker offensichtlich hier, das Kreuzprodukt wird jetzt gebildet. Jetzt kommt Harald Essen, Harald Tübing, Martin Essen. Ich bin auch mal ein Tübing gewesen, der Harald in Essen passt also alles wunderbar zusammen. Da kann man auch tatsächlich Bereiche... Ja, noch eine Frage? Ja, also die Frage ist sozusagen, was passiert, wenn ich jetzt hier ein Leerzeichen hin mache? Dann betrachtet ihr das als zwei getrennte Breisexpanschen. Dann kriege ich aus der ersten Harald Martin raus und aus der zweiten Essen Tübingen. Das hätte ich mir also einfacher erzeugen können. Ja. Also ich hab da mal rumgefummelt und also die Frage ist, muss man da jetzt escapen oder wenn man genau diesen Effekt, das geht gar nicht mehr, also das hat... Also Harald erklärt euch nach dem Vortrag, wie das mit den Wechseläches geht und den Double Quots. Ich bin relativ skeptisch, dass die Aufgabe, die ihr mir stellen werdet, dann lösen kann. Aber ich lasse mich auch eines Bestens über. Ja, schon so. Was haben wir als nächstes hier in diesen Klammern? Könnten wir zum Beispiel auch machen die bis 17. Jetzt die zwei Punkte statt des Kommers, dann zählt er durch. Manchmal sehr hilfreich. Er kann das auch in Zweierschritten tun. Er kann das Ganze auch mit Buchstaben machen. Ja. Da kam die Hupe zurecht. Also gibt mir Zeichenbereiche an. Oder auch so was. Alle kleinen Buchstaben. Das sind die... Mit Umlautung klappt das Ganze nicht mehr. Interessant auch die Frage, die ich mal bekommen habe. Was passiert denn jetzt, wenn ich das hier mache vom großen Z bis zum kleinen A? Da kommt Asci. Da können wir direkt wieder einen hier auf gleich für den Geschenk notieren. Da kommt Asci. So, da kommt Z. Sieht jemand das Problem? 15 Minuten noch. Das ist ein großes Problem, aber... So, wer kennt Asci so gut, dass er den Fehler hier sieht? Der Backslash... Also Harald, da fehlt der Backslash. Wenn der Asci Tabelle nachguckt, sieht da fehlt der Backslash. Ich habe das mal als Fehler angemerkt und da kam eine sehr lange Erklärung, warum das so passiert ist und... Es macht auch keinen großen Sinn, da irgendwas zu machen. Wenn man hier genau guckt an der Stelle, steht da auch nicht wie an den anderen Stellen ein Leerzeichen, sondern stehen zwei Leerzeichen. Irgendwie ist die Reihenfolge der Evaluation in der Schelle so, dass er dann aus dem Backslash ein Backslash Leerzeichen macht. Also macht es einfach nicht. Genau. Aber es ist wertlos und kompliziert. Aber ja, auch bei Harald, nach dem Vortrag, ich werde voller Demut alles tun, aber ich habe da lange versucht und ich glaube, es hat auch gar keinen Sinn. Also das ist so ein typisches Beispiel. Vielleicht könnte man akademisch da noch was herausfinden, ich glaube es aber nicht. Weitere Fragen zu Eskepsequenzen, einfache und doppelte Hochkommer im Anschluss an den Talk an Harald. Und du hast eine halbe Stunde, ich habe mich vertan, du hast noch 30 Minuten. So, da machen wir ja gerade noch, sind auch Netzwerke im Raume bestimmt, ne? Ja, Entschuldigung, ich bin ein alter Mann mit diesem modernen Zeug. Nein. Ja, ja, da kommt wieder ein Berichtigte. So. Was mache ich jetzt hiermit? Ne, das... So, was kriege ich damit angezeigt? Ich glaube, das lässt sich in einem... Also die alten Männer hier und alten Frauen und wer auch immer, alle Class-Wass-Adressen? Class-C. Das müssten alle Class-C-Adressen sein. Jetzt kommt die Warnung, liebe Kinder, macht das nicht auf eurem Rechner nach, wenn ihr nicht genug Hauptspeicher habt. Ich mache mal ein zweites Fenster auf und jetzt können wir hier der Basch zusehen, wie sie langsam größer wird. Ja, weil sie baut jetzt tatsächlich erstmal alle dieses Strings da hintereinander auf. Ich hoffe, ich habe mich jetzt nicht irgendwie hier vortan, aber ich meine, es käme gerade noch so mit meinem Hauptspeicher hin und jetzt gibt er die auch alle aus. Das kann dann auch mein Moment dauern. Genau, also da müsste man... So, und jetzt jetzt müsste eigentlich jemand sagen, warum geht das denn überhaupt? Warum geht das nicht mit bin Echo? Warum sollte mein Vortrag auch blind halten können? Was passiert jetzt, wenn ich hier nicht das Echo, sondern User-Bind-Echo hinschreibe? Probieren wir es mal aus. Ja, also erstmal ist es richtig, dass das Programm Echo, was wir eben genutzt oder was wir die ganze Zeit genutzt haben, das ist ja ein eingebautes Kommando. Jetzt wird ein externes Programm aufgerufen und wenn ein externes Programm aufgerufen wird, dich du, Harald, da sitzt noch einer, hervorragend, den müssen wir uns hier. So, jetzt, er fängt jetzt erstmal an und baut diese ganzen Strings auf und merkt dann irgendwann Minuten später, dass das Ganze so nicht klappen wird. Ja, er baut erstmal wieder diese ganzen Class-C-Netz-Adressen zusammen und merkt dann, ruft dann das Programm auf und sagt, nee, das klappt nicht, aber daran zu optimieren, ich glaube, wäre auch irgendwie sinnlos. Ja, auch, also die Frage, was mit Double Quotes passiert, ich glaube, auch eine Frage an Harald für nach dem Vortrag. Es wird nicht wirklich was Dolles bringen, also, d.h. in dem Fall können wir es, glaube ich, sogar machen. Wir werden mit Harald sprechen, dass er nächstes Jahr einen Quot und Double Quot Talk einreichen. Also die Antwort ist einfach, in Double Quotes findet Brace Expansion überhaupt nicht statt. Ja, genau. Also, es ist wichtig, dass, also die Frage war, ist das jetzt ein Spezial von, eine Funktion von Echo sozusagen oder wo kommt das her und die Frage ist deshalb so wichtig, die Antwort ist ein klares Nein. Alles, was wir jetzt getan haben spielt sich in der Shell ab, die Shell baut erst diese Klass-C-Netz-Adressen auf und übergibt sie dann dem Programm Echo. Deshalb ist, das hat mit dem Echo, da könnte man jetzt auch Kett machen, da würde Kett jetzt die 2 hoch 24 nicht gefundenen Datein haben der Menge. Wenn man die Fehlermeldung genau anschaut, da steht BESCH, Doppelpunkte vor der Fehler, kommt vor der BESCH. Ich will was aus, von egal was, ob da jetzt Joseph in Echo gestellt wäre, die sagt schon die Argument, das ist genauer, der BESCH. Das kriegt dann die BESCH zurück und vertexte das. Die BESCH baut die 2 hoch 24 Argumente zusammen, startet ein Programm und will dem 2 hoch 24 Argumente übergeben und dann sagt der Colonel, das ist jenseits der Limits. Nein, wir ändern jetzt nicht das, erlaubt der Anteil der Parameter. Genau. Wichtig ist, was man gerne verwechselt und deshalb gehe ich jetzt doch darauf ein, ist die Brace-Expansion mit der Wildcard-Expansion. Ich habe mich ja eben ein paar Mal vertippt, als dann auch dieses Pieps aus dem Publikum kam. Machen wir mal folgendes. Touch. Snash Stamp. A bis F. 60, ne, ich will genau, ich will schon Slip 60 haben. Ja, stimmt, ja, doch hier, das ist wieder ein berechtigter Kommentar. Brace-Expansion. Und jetzt mache ich ein Touch das Stamp BCD bis H. So, jetzt, also hier, hier müsstet ihr wissen, was passiert. Was passiert hier mit diesem Kommando? Ja, genau, wir erzeugen, wir übergeben dem Touch die Argumente Temp A, BCD und so weiter und dann erzeugt das Touch eben auch diese sechs Dateien. Dann warten wir, eine Minute, ich schmeiß das schon mal an, damit die Minute uns nicht von der Zeit abgeht. So, und dann haben wir ja hier nochmal ein Shell-Sonderzeichen. Also, ja, also eine Gruppe. Die eckigen Klammern, das gehört so den Wildcard-Sonderzeichen. Was passiert jetzt da? Und das höre ich so oft falsch und ich habe es wahrscheinlich mindestens genau so oft falsch erzählt, bis ich da einmal klargemacht habe, was da wirklich passiert, ja. Genau, weil was passiert jetzt? Jetzt sind wir nicht mehr im Bereich der Wildcard-Expansion, was irgendwie ein normales Kombinatorikproblem ist, sage ich mal, sondern wir sind jetzt hier bei der Wildcard-Expansion. Der sucht jetzt hier alle Dateien zusammen, die zu diese Muster passen und nach dem, was wir eben angelegt haben, haben wir die Dateien Temp D, Temp E und Temp F angelegt und der Dateien Temp G und Type H, die gibt es nicht. Die würden zwar zu diese Muster passen, aber da es sie nicht gibt, wären sie an der Stelle auch nicht sozusagen expandiert eingesetzt. Und wenn ich jetzt also alles richtig gemacht haben sollte und da nicht zu viel drin steht, ja, da gab es wohl irgendwie genau, da gab es von vor ein paar Tagen noch eine Temp M, aber das ist jetzt hier genau das, was passiert ist. Um 10.53 Uhr haben wir Temp A bis Temp F angelegt und um 10.54 Uhr haben wir die D und die E und die F nochmal berührt und damit deren Zeitstempel hochgesetzt. Also durchaus etwas, was man sich klar machen sollte. Diese beiden Prozesse, die werden gerne vermischt und ihr seht ja, ich vermische sie auch gerne, indem ich an Stellen, wo ich müsste, dann hin und wieder mal den Minus Strich schreibe. Da muss man sich konzentrieren und wissen, was passiert. Also wichtig und das hier bezieht sich immer, da sucht die Schell für euch Dateien zusammen. Dateien, die es gibt. Hier, das sieht jetzt natürlich aus und alles wie ein Dateiname aus vom Gefühl her, aber das ist eigentlich, sind das nur Zeichenketten, die nach einer gewissen Regel zusammengebaut werden. Die haben mit den Dateien, die es im Datei nicht zu tun. Gut, so. Das war jetzt das 3. Kapitel. Jetzt kommt das 4. Nein, der Talk geht über geschweifte Klammern. Genau, aber eins wollte ich doch noch. Harald, er hat zwar wieder nicht Rechte, Harald, aber auch nicht Unrechte. Ich habe hier eine Menge von Dateien angelegt und da wollte ich noch eine schöne Sache zeigen. Ich mache dann ein E und wenn ich jetzt die Tab Taste drücke, ich nehme an den meisten, die mit der Schell arbeiten, ist die bekannt, dann wird der Dateiname vervollständigt. Es gibt nur einen Dateinamen, der mit dem kleinen E beginnt, also vervollständigt, das hier zu essen, das steht jetzt nichts drin, deshalb kommt auch nichts raus. Jetzt fangen wir mal mit dem F an. F-Tab. So, er sagt, ok, alle Dateinamen, die jetzt hier kommen, da kommt hinter dem F1a, dann kann ich das mal machen. Aber dann geht es nicht weiter. Und jetzt pieps es. Die Technik hat eben gesagt, brauchst du Sound, das ist die einzige Stelle, wo ich Sound brauche. Also ich sage jetzt, es pieps jetzt hier. Weil er es nicht vervollständig kann und wenn ich nochmal Tab drücke, dann, das ist jetzt eine interaktive Bedienung hier, dann zeigt er mir an, wie es vervollständig könnte. Ich kann ihm auch hier sagen, Meter oder Escape Stern direkt dahin. Aber jetzt kommt es noch viel abgefahrener, weil wir sind ja bei den geschweiften Klammern. Und jetzt mach ich Meter, also Escape oder Alt und dann geschweifte Klammer auf und dann vervollständigt er mir das so. Also ich habe das in meinem Leben noch nie praktisch angewendet. Aber meine Reaktion war genauso wie eure eben, und dann ist es begeistert. Ja, gut. Also das ist doch wirklich hier. Diesen einen Moment im Leben, wo man das dann braucht. Wer weiß, nur ob man sich in dem einen Moment daran erinnert, das ist natürlich die zweite Frage. Das ist eine Frage. Okay, Frage. Frage, Frage, Frage, ja. Das kann ich dir nicht sagen, aber da haben wir im nächsten Jahr den Z-Gel-Vortrag. Also die Frage war, ob es auch in der Z-Gel. Gut, so. Jetzt kommen wir zu einem weiteren Thema. Das heißt Grouping. Und da macht man auch gerne blöde Fehler, wie viele Minuten noch? Ach, das klingen wir locker hin. Grouping. Im Grouping fasst man mehrere Kommandos zusammen und gibt den sozusagen einen gemeinsamen Standard Output, einen gemeinsamen Standard Erronen, gemeinsamen Standard Input und was auch sonst noch immer. Das sind die Kanäle, die man so typischerweise hat. Und da gibt es zwei Möglichkeiten und die unterscheiden sich diffiziel. Ich fange mal erstmal an mit den Rundenklammern. Echo. Hallo. Echo. GPN 21. Und dann mache ich in die Klammer zu und mache das nach Runde.out. So. Was passiert? Echo schreibt Hallo auf den Standard Output. Das zweite Echo schreibt GPN 21 auf den Standard Output. Die haben einen gemeinsamen Standard Output und der wird umgeleitet in der Teilrunde.out. Und wenn wir uns dann die Datei anstehen, gucken, steht da dieses drin. So, und jetzt haben das wahrscheinlich alle schon mal, also das nennt man dann auch so Command Grouping, das haben wahrscheinlich alle von euch schon mal gesehen. Klammern. Aber es ist gemeinerweise diffiziel anders. Ich schreibe das nochmal hier hin. So, wenn ich mit dasselbe mit den Geschweiftenklammern, es gibt dann immer noch einen Unterschied dazu gleich mehr, ich mach das mal mit den Geschweiftenklammern. Was muss ich jetzt machen, damit das funktioniert, ja? Genau, also ich muss hier erstmal ein Leerzeichen einbauen. Echo, Hallo. EPN 21. Jetzt muss ich hier noch einmal einen Zirkola hintergeben und dann kann ich das die schließende Geschweifteklammer machen und dann mach ich das mal in Geschweifte Punkt Out. Und jetzt ist die Frage, warum ist das so? Das kann man dann auch verstehen. Also die runde Klammer die ist in der Schelle ein Schuloperator und das ist praktisch so ein Zeichen was eben wie das Plus in der Mathematik oder das Semikolon, da um das Semikolon in der Schelle, muss ich ja auch keine Leerzeichen drum machen. Das kann ich machen, muss ich aber nicht. Die bricht sozusagen im Paar singt die Stelle ab und danach kommt dann was Neues. Die Geschweifteklammer und das können wir Ihnen auch fragen nämlich mit dem Kommando Type. Was ist denn die Geschweifteklammer? Die Geschweifteklammer ist ein Schlüsselwort. Wie zum Beispiel eben auch das IF, was Sie alle wahrscheinlich gesehen haben. Ja und jetzt wird klar wenn ich das hier oben so schreibe oder auch so was würde jetzt, was versucht jetzt die Shell wenn ich dieses Kommando eingebe ja, hack halt hinter dir. Genau, sie guckt nach also erst mal, ich wiederhole es mal direkt gibt es ein Beinerie, was Geschweifteklammer auf Echo heißt. Das wird unser erster Fehler sein und dann was passiert dann? Ah, da nehmen wir mal hier. Genau, die wird als Argument also das ist jetzt einfach ein Argument in der Kommando-Zeile von dem Echo. Und dann kriegen wir hier einmal die Fehlermeldung dass er dieses Kommando nicht gefunden hat. Das ist deine Antwort und jetzt gucken wir mal in Geschweifte.out rein. Da steht dann gpn22 und die Geschweifteklammer zu drin. Es ist jetzt, wenn man es dann einmal weiß auch klar aber wenn man es verstanden hat kann man sich halt einfacher merken wieso manchmal im Leben. Genau, jetzt ist die Frage natürlich jetzt haben wir jetzt zweimal diese, einmal mit Runden einmal mit Geschweiftenklammern einmal mit Geschweiftenklammern was ist denn jetzt der Unterschied? Genau, die Runde startet eine Sub-Shell. Das heißt es wird eine neue Shell aufgemacht, da in dieser neuen Shell werden die Kommandos ausgeführt und dann wird diese neue Shell geschlossen und es geht weiter. Jetzt ändern wir das Kommando mal ein bisschen. Ne, ich wollte das hier haben wir wechseln erstmal ins Verzeichnis ins Rundverzeichnis man kann übrigens natürlich auch hier das Leerzeichen machen man muss es nur nicht machen und machen mal ein Ls und was steht jetzt in Runde drin? Alle Dateien aus dem Rundverzeichnis ok machen wir das selbe mit naja, ich bin jetzt egal machen wir das selbe mit dem hier was steht jetzt in der Datei Geschweifte drin? gar keine Dateinamtsgeschweifte warum? Wir haben jetzt keine Sub-Shell ausgemacht dieses CD ist in der aktuellen Shell ausgeführt worden und weil es in der aktuellen Shell ausgeführt worden ist, ist diese Shell jetzt im wenn ich jetzt den Hangal was beibringen kann ist heute ein großer Tag dann wiederholen aber bitte auch seine Frage der Harald hat gefragt wir haben hier Geschweifte so schnell geschrieben und da wenn man Tab drückt dann darf ja jetzt eigentlich gar nichts passieren, weil ich nicht im richtigen verzeichnet bin, aber wieder hinter dir wurde die richtige Antwort schon gegeben Meterpunkt kopiert das letzte Wort aus der letzten Zeile Ja, aber Ausrufezeichen Dollar ist nicht interaktiv sozusagen ok, Ausrufezeichen Dollar genau, das sollte das sein einfach ein Gabel hier für letztes Wort der letzten Zeile ist Meterpunkt, man kann auch das letzte Wort aus der vorletzten Zeile, dann macht man das zweimal, man kann auch das erste Wort dann muss man Meterzahl Meterpunkt machen also ich muss jetzt in meinem, ich muss jetzt zurück wechseln wo ich eben gewesen bin und da ist natürlich die Dateingeschweifte auch entstanden mit demselben Inhalt wie die Dateirunde auch nur haben wir jetzt an der Stelle diesen Verzeichnis wechsel sozusagen einmal ist in der Substelle ausgeführt und dafür nicht relevant und ja, das war es dann, so neun Minuten so, das jetzt kommen wir dem Ende nah es gibt noch eine sehr wichtige Stelle für die, die programmieren möchten in der Shell reguläre Ausdrücke sagen euch was auch noch ein Thema für nächstes Jahr das ist ein ganzer Treck das ist ein ganzer Treck genau welche Programme, also wir reden sogar über erweiterte reguläre Ausdrücke denn nur in diesen sind die geschweiften Klammern eigentlich so richtig da welche Programme kennt ihr die mit regulären Ausdrücken arbeiten Greb zum Beispiel genau Perl, ja ok direkt die Kanone ja, bitte SED genau, das sind so die Klassiker AWK kann es auch, aber und wahrscheinlich kann es auch wieder melkleint heutzutage, also sie sind ja überall an welcher Stelle kann jetzt die Shell reguläre Ausdrücke so, wir setzen mal eine Variable die nahe Variable, auch haben wir die noch jetzt kommt die große Frage was machen die doppelten eckigen Klammern und was machen die einfachen eckigen Klammern Kopfweh also ja genau also ich wiederhole es kurz also richtige Antwort es gibt ein Kommando das heißt eckige Klammer auf und das ist dasselbe Kommando wie das Kommando Test mit welcher sozusagen kleinen Zusatzbedingungen das Kommando eckige Klammer aufmöchte als letztes Argument eckige Klammer zu haben sonst beschwird das ich, also wenn ich das Kommando eckige Klammer auf nur aufrufe dann beschwert er sich über die eckige Klammer zu, die fehlt ansonsten ist es das Kommando Test hervorragend erklärt auch noch, es gibt man kann ja mit type muss ich jetzt mal abkürzen nachgucken das Kommando eckige Klammer auf hat man auch in die Shell eingebaut warum sind viele Kommandos in die Shell eingebaut, da gibt es ein paar verschiedene Gründe aber hier der ist relativ offensichtlich warum hat man so Kommando wie Eche Kommandos wie Eche und eckige Klammer auf in die Shell eingebaut, ja genau, und die Antwort ist für ein externes Kommando muss ein Fork und ein Accent gemacht werden, also ein neuer Prozess gestartet der Körnel involviert ich glaube es dauert eine Millisekunde auf meinem Rechner hier, aber das ist auch anders, aber es kostet jedenfalls Ressourcen und das hier ist beliebig viel schneller das kann auch ja, also wobei es jetzt auch so ist achso genau zusammenfassen also man hat natürlich jetzt die Sicherheit wenn man die BESCH hat und in der BESCH das eckige Klammer verwendet das ist A da, das sollte bei einem richtigen Diskussion sowieso da sein aber B es ist auch klar was es für eine Funktion hat und das mit der einen Man Page würde ich nicht so ganz unterstützen also wenn ich man eckige Klammer aufsage welche Man Page bekomme ich dann die von dem externen Programmen wie kriege ich die da geht auch auf diese Equivalenz nahezu von Test und eckige Klammeraufnahme eingegangen wie kriege ich die Man Page von dem initial eingebauten eckige Klammeraufkommando ja vielleicht vielleicht und nach langer Zeit aber dafür gibt es auch ein eingebautes Kommando namens Help das mir die anzeigt also da ah gut der verweist jetzt wahrscheinlich auf die Man Page ah er verweist auf das Test so und da kriegen wir jetzt und dann könnte man jetzt natürlich auch noch hingehen da hat er halt recht und 1 zu 1 überprüfen ob das übereinstimmt so jetzt kommen die doppelten eckigen Klammern und in diesen doppelten eckigen Klammern das ist ein modernes Wesen um Vergleiche zu machen ich sage jetzt Wesen es ist tatsächlich im POSIX Standard schon reserviert aber es muss nach Laut POSIX nicht implementiert sein so jedenfalls mein Stand hier kann ich Vergleiche machen innerhalb dieser doppelten eckigen Klammern gelten die normalen Regeln was die Shell so tut wie sie Variable expandiert die gelten da nicht und das spart einem also zum Beispiel kann ich so was machen wie wenn die Zahl der Argumente größer als 1 und die Zahl der Argumente kleiner als 7 ist das kann ich hier schreiben wenn ich das mit einfachen eckigen Klammern schreiben würde sieht jemand was dann passiert da gibt es kein und und warum das und und ist schon ein Shell-Sonderzeichen mit dem man nämlich 2 Kommandos verbinden kann das geht jetzt alles weil sozusagen so merke ich mir das innerhalb der doppelten eckigen Klammern diese normalen Shell-Mechanismen außer Kraft gesetzt werden und innerhalb dieser Mechanismen gibt es jetzt auch etwas da können wir tatsächlich auch vergleiche auf auf die auf die Gleichheit mit einer regulären mit einem regulären Ausdruck machen und zwar ich mache es immer falsch um so wenn der Ort diese Muster entspricht also wenn er mit einem großen K anfängt dann kommen 2 beliebige Zeichen das ist ja das Wiederholungszeichen hier die geschreifenden Klammern dass es keine erweiterten regulären Ausdrücke hat der kommt ja dann nächstes Jahr zum Workshop aber wer es halt kennt, der weiß jetzt das ist so zu lesen, der Wert der Variablen fängt mit einem großen K an dann kommen 2 beliebige Zeichen und dann kommt ein kleines N so und das müsste ja der Fall sein und weil das der Fall ist, ist jetzt was passiert genau also es gibt hier verschiedene Rheinrufer die Brechtig dabei sein wir gucken in den Exitstatus dieses Kommandos das ist dann tatsächlich 0 ist der Exitstatus, es ist gut gegangen und wunderbar Abschluss, ein Kapitel schlappe ich jetzt aber das ist wirklich, ich habe es noch nie benutzt wenn man mit diesen Dingern hier arbeitet also wenn man dieses Matchen auf reguläre Ausdrücke braucht, ich nutzt in der Shell dann bekommt man in der Shell ein Array gefüllt und das heißt Match, Rematch und in dem Array-Element 0 steht der ganze gemetschte Ausdruck drin das ist also Köln und in dem Array-Element 1 steht das was in den ersten Klammern drin steht und das ist dann in dem Fall Ö und L ja und dann bin ich jetzt fast fertig geworden und es ist auch warm und ich danke euch für die aktive Mitarbeit und wir müssen jetzt mal gucken wie wir hier die Preise verteilen vielen Dank