Ich habe eine Zeichenkette in einer Variablen. Wie schreibe ich das n-te Zeichen dieser Zeichenkette in eine neue Variable?
Für das letzte Zeichen in der Variablen habe ich eine Lösung gefunden:
Code: Alles auswählen
abc=${xyz: -1}
Code: Alles auswählen
abc=${xyz: -1}
Code: Alles auswählen
:-Q a=auto
:-Q b=${a:2:1}
:-Q echo $b
t
:-Q
Wieder was gelernt Habe ich wohl noch nie gebraucht, wusste deshalb nicht, dass es von Haus aus geht.Meillo hat geschrieben:03.08.2021 08:41:10Suche in der Manpage der bash nach ``Substring Expansion'', dann wirst du fuendig.
Code: Alles auswählen
~$ awk -vFS= '{print $3}' <<< "abcdefg"
c
Code: Alles auswählen
:-Q echo auto | cut -c3
t
Code: Alles auswählen
:-Q
Code: Alles auswählen
xyz=auto
abc=${xyz:2:1}
echo $abc
Das ist mein Prompt. Manchmal bin ich zu faul den jeweils durch `$' zu ersetzen.
Ja.Was ich da gemacht habe, erkläre ich mir einstweilen so:
1. Ich habe die Zeichenkette 'auto' in die Variable xyz gesteckt.
2. Mit der zweiten Zeile weise ich die bash an, an die zweite Stelle in xyz zu springen und sich dann genau ein Zeichen dahinter zu merken und den Inhalt dieser (3.) Stelle in der Zeichenkette (im Beispiel also das 't' in 'auto') in die Variable abc zu schreiben.
3. Mit echo $abc überprüfe ich das Ganze.
Kann man sich das so merken?
Das Konstrukt ist nicht {...} sondern ${...}.Wie hat man das Konbstrukt {xyz:2:1} zu verstehen? Als eine weitere, unbenannte Variable (auf deren Inhalt ich via voranstehendem '$' zugreife?
Wende einfach deine eigene Erklaerung von oben darauf an und du findest die Antwort selber.Ich habe dann mal abc=${xyz:3:0} erfolglos probiert. Warum erfolglos?
Ich kann's mir schon denken. Aber ein direktes Anspringen des Zeichens à laMeillo hat geschrieben:Wende einfach deine eigene Erklaerung von oben darauf an und du findest die Antwort selber.
Code: Alles auswählen
abc=xyz[n]
Es waere besser, wenn du deinen Gedanken hier schriftlich formulieren wuerdest.fischig hat geschrieben:03.08.2021 17:44:37Ich kann's mir schon denken.Meillo hat geschrieben:Wende einfach deine eigene Erklaerung von oben darauf an und du findest die Antwort selber.
Das ist eine lustige Aussage ... Mir waere es auch lieber, wenn das Geschlecht der Artikel im Franzoesischen gleich wie im Deutschen waere.Aber ein direktes Anspringen des Zeichens à lain Pascal wäre mir sympathischer gewesen.Code: Alles auswählen
abc=xyz[n]
Hatte ich das nicht schon?Es waere besser, wenn du deinen Gedanken hier schriftlich formulieren wuerdest.
Du hast folgendes geschrieben:fischig hat geschrieben:03.08.2021 18:13:55Hatte ich das nicht schon?Es waere besser, wenn du deinen Gedanken hier schriftlich formulieren wuerdest.
... *nachdem* du die Funktionsweise von ${var:pos:len} erklaert hast. Da frage ich mich, warum bei dir hier noch eine Frage offen ist, wo du doch schon verstanden zu haben scheinst, wie die Substring-Expansion funktioniert.fischig hat geschrieben:03.08.2021 09:36:05Ich habe dann mal abc=${xyz:3:0} erfolglos probiert. Warum erfolglos?
Code: Alles auswählen
abc=copy(xyz,n,1)