bash, Länge einer Zeichenkette (gelöst)
bash, Länge einer Zeichenkette (gelöst)
bash:
Ich habe eine Zeichenkette unbekannter Länge in einer Variablen. Möchte mir jemand sagen, wie ich die Anzahl der Zeichen in dieser Zeichenkette feststelle?
Grüße, Günther
Ich habe eine Zeichenkette unbekannter Länge in einer Variablen. Möchte mir jemand sagen, wie ich die Anzahl der Zeichen in dieser Zeichenkette feststelle?
Grüße, Günther
Zuletzt geändert von guennid am 28.03.2011 21:54:22, insgesamt 1-mal geändert.
-
- Beiträge: 2951
- Registriert: 24.12.2010 16:50:59
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rheinland
Re: bash, Länge einer Zeichenkette
echo $FOO | wc -c
Code: Alles auswählen
$ FOO="bar"
$ echo $FOO | wc -c
4
$
Re: bash, Länge einer Zeichenkette
Danke sehr!
GoKis Methode habe ich noch nicht probiert.
Bei syssis Methode frage ich mich, wie gezählt wird. Selbst gezählt habe ich 23 Zeichen (einschließlich Leerzeichen). wc -c behauptet, es seien 24. Folglich kann der Unterschied nicht daran liegen, dass ich mit mit 1 statt mit 0 zu zählen begonnen habe.
Grüße, Günther
GoKis Methode habe ich noch nicht probiert.
Bei syssis Methode frage ich mich, wie gezählt wird. Selbst gezählt habe ich 23 Zeichen (einschließlich Leerzeichen). wc -c behauptet, es seien 24. Folglich kann der Unterschied nicht daran liegen, dass ich mit mit 1 statt mit 0 zu zählen begonnen habe.
Grüße, Günther
Re: bash, Länge einer Zeichenkette
Weil echo standardmäßig ein '\n' anhängt (Zeilenumbruch). Wenn du das nicht willst, übergib noch den Parameter -n an echo.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Re: bash, Länge einer Zeichenkette
GoKis Methode funktioniert hier nicht.
@TRex2003
Danke für die Erklärung!
Das echo interessiert weniger. Ich schaffe es jetzt nicht, die Ausgabe von $FOO | wc -c wieder in einer neuen Variablen unterzubringen.
Grüße, Günther
@TRex2003
Danke für die Erklärung!
Das echo interessiert weniger. Ich schaffe es jetzt nicht, die Ausgabe von $FOO | wc -c wieder in einer neuen Variablen unterzubringen.
Grüße, Günther
-
- Beiträge: 2951
- Registriert: 24.12.2010 16:50:59
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rheinland
Re: bash, Länge einer Zeichenkette
Code: Alles auswählen
COUNT=$(echo $FOO | wc -c)
echo $COUNT
Re: bash, Länge einer Zeichenkette
Danke sehr, auch an yeti Hab's jetzt hinbekommen.
Geht's auch ohne den ständigen Umweg über echo?
Und Pascal ist deutlich angenehmer.
Grüße, Günther
Geht's auch ohne den ständigen Umweg über echo?
Und Pascal ist deutlich angenehmer.
Grüße, Günther
-
- Beiträge: 2951
- Registriert: 24.12.2010 16:50:59
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rheinland
Re: bash, Länge einer Zeichenkette
Dann solltest du GoKi's Version bevorzugen:
Code: Alles auswählen
COUNT=$(expr length $FOO)
Re: bash, Länge einer Zeichenkette
In GoKis Version steckt irgendwo ein Sytaxfehler. Hiere funktioniert weder seine ursprüngliche Version noch die zuletzt von dir angeführte:
Code: Alles auswählen
expr: Syntaxfehler
Re: bash, Länge einer Zeichenkette
Wenn ein Leerzeichen enthalten ist, dann musst Du die Variable in "" einschließen.
Code: Alles auswählen
$ FOO="foo bar"
$ expr length "$FOO"
7
MfG GoKi
:wq
:wq
Re: bash, Länge einer Zeichenkette
Danke sehr!
Und jetzt mal zum praktischen Nährwert meiner Fragen:
acpi -b liefert folgende Ausgabe: Mit könnte man nun den Prozentwert in einem fbpanel anzeigen. Da ich weder weiß, was je nach verwendetem Akku mit "Unknown" passiert, noch, ob der Prozentwert ein- oder zweistellig ist, ist -c21-23 unbrauchbar, weil variabel. Immherhin, die letzte Zahl hätte ich ja jetzt dank eurer Hilfe. Eigentlich müsste man jetzt vom Endpunkt aus die Zeichen bis zum Leerzeichen vor dem Prozentwert zurückgehen und könnte dann auch -c21 berechnen. Dem Parameter "-c" Variablen anzudrehen, hab ich bisher nicht geschafft. Wenn mir jemand den kompletten code liefern könnte, wäre ich dankbar. Ansonsten würde ich mir ein Pascal-Programm schreiben (was anderes kann ich nicht), das den Wert in eine Datei schreibt, aus der ich ihn für fbpanel mit cat wieder herausholen würde. Aber die freepascal-Installation scheint ja sowas von unübersichtlich zu sein!
Grüße, Günther
Und jetzt mal zum praktischen Nährwert meiner Fragen:
acpi -b liefert folgende Ausgabe:
Code: Alles auswählen
Battery 0: Unknown, 97%
Code: Alles auswählen
echo $(acpi -b | grep "Battery 0" | cut -c21-23)
Grüße, Günther
-
- Beiträge: 2951
- Registriert: 24.12.2010 16:50:59
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rheinland
Re: bash, Länge einer Zeichenkette
Code: Alles auswählen
echo $(acpi -b | grep "Battery 0" | cut -d, -f2)
-
- Beiträge: 2951
- Registriert: 24.12.2010 16:50:59
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rheinland
Re: bash, Länge einer Zeichenkette
Achja... vermutlich geht es sogar einfacher. Such mal unter /sys nach acpi: find /sys -name acpi
Ich wuerde spekulieren, dass du dort eine Datei findest, die bei einem "cat" ebenfalls den Akkuladestand in Prozent auswirft.
Ich wuerde spekulieren, dass du dort eine Datei findest, die bei einem "cat" ebenfalls den Akkuladestand in Prozent auswirft.
Re: bash, Länge einer Zeichenkette
Super! Danke!
Und wenn du mir jetzt noch sagen könntest, was ich da mache, wäre es perfekt. Die Angaben zu -d und -f in der manpage zu cut sind mir völlig unverständlich.
Grüße, Günther
[edit:] wo sich acpitool da unter /sys den Akkustand holt, kriege ich in diesem Dschungel nicht raus.
Und wenn du mir jetzt noch sagen könntest, was ich da mache, wäre es perfekt. Die Angaben zu -d und -f in der manpage zu cut sind mir völlig unverständlich.
Grüße, Günther
[edit:] wo sich acpitool da unter /sys den Akkustand holt, kriege ich in diesem Dschungel nicht raus.
-
- Beiträge: 134
- Registriert: 03.02.2011 11:11:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Frankfurt
Re: bash, Länge einer Zeichenkette
Nochmal zum Problem Zeichenkettenlänge:
Nichts gegen die bewährten Old-Style Methoden (wc -c, expr length), aber in der bash geht das doch wesentlich komfortabler:
Nichts gegen die bewährten Old-Style Methoden (wc -c, expr length), aber in der bash geht das doch wesentlich komfortabler:
Code: Alles auswählen
VAR="foo bar"
LEN=${#VAR}
echo $LEN
Re: bash, Länge einer Zeichenkette
Was ist daran unverständlich?guennid hat geschrieben: Und wenn du mir jetzt noch sagen könntest, was ich da mache, wäre es perfekt. Die Angaben zu -d und -f in der manpage zu cut sind mir völlig unverständlich.
cut teilt einen String über die Feldtrennzeichen in Felder auf, aus denen du dann bestimmte auswählst. -d gibt das Trennzeichen an, -f die Felder.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Re: bash, Länge einer Zeichenkette
Wie waer's einfach damit:
Uebrigens, lasst doch dieses
einfach weg.
Code: Alles auswählen
acpi -b | awk '{print $NF}'
Uebrigens, lasst doch dieses
Code: Alles auswählen
echo $(...)
Use ed once in a while!
Re: bash, Länge einer Zeichenkette
@TRex2003
Danke für die Erklärung. Hab's jetzt verstanden!
@newdeb
Sieht pascal-Syntax recht ähnlich.
Grüße, Günther
[edit:] Nochmals vielen Dank an alle Beteiligten. Ich denke ich habe einiges dazu gelernt.
Danke für die Erklärung. Hab's jetzt verstanden!
Wenn ich die Frage hätte beantworten können, hätte ich die manpage wahrscheinlich verstanden gehabt.TRex2003 hat geschrieben:Was ist daran unverständlich?
@newdeb
Sieht pascal-Syntax recht ähnlich.
Grüße, Günther
[edit:] Nochmals vielen Dank an alle Beteiligten. Ich denke ich habe einiges dazu gelernt.