Problem
Ich habe versucht, den Signalpegel für WLAN auf folgende Weise in einem Bash-Skript zu extrahieren (Anführungszeichen scheinen keinen Unterschied zu machen):
string="$(iwconfig wlan0 | grep -I Signal)"
Wenn ich echo $string
bekomme, bekomme ich was ich erwarte:
Link Quality=63/70 Signal level=-47dBm
Aber wenn ich versuche, einen Teilstring zu bekommen echo ${string:5}
, gibt er dasselbe zurück.
Debuggen:
Wenn ich die Ausgabe von wconfig wlan0 | grep -I Signal
direkt in die Variable string="Link Quality=63/70 Signal level=-47dBm"
einfüge, funktioniert alles wie erwartet.
echo $string
# Link Quality=63/70 Signal level=-47dBm
echo ${string:5}
# Quality=63/70 Signal level=-47dBm
Frage: Laut Internet werden alle Bash-Variablen als Zeichenfolgen gespeichert. Daher sollte das Debugging-Ergebnis das gleiche sein wie mein ursprüngliches Problem. Gibt es einen Grund, warum es im ursprünglichen Problem nicht als Text analysiert wird?
quelle
Das funktioniert auf meinem Computer:
wlp60s0
durchwlan0
.42
und ein Leerzeichen stehtdBm
. Daher wird dercut
Befehl angewiesen, die Felder 4 und 5 zu drucken. In Ihrer Frage ist kein Platz vorhanden, daher bin ich mir nicht sicher, welche Version Sie verwenden.Sie könnten auch verwenden:
cut
wird angewiesen,=
als Feldtrennzeichen zu verwenden.Wenn Sie
${string...}
jedoch die richtige Syntax verwenden möchten, lautet:Beide Methoden funktionieren, um die Teilzeichenfolge nach der letzten zu übernehmen
=
. Die ursprüngliche Methode5
in Ihrer Frage verstehe ich nicht, wie es funktionieren kann.quelle