Wie erhalten Sie die Länge eines in einer Variablen gespeicherten Strings und weisen dies einer anderen Variable zu?
myvar="some string"
echo ${#myvar}
# 11
Wie weisen Sie einer anderen Variable den Wert 11
zu?
Wie erhalten Sie die Länge eines in einer Variablen gespeicherten Strings und weisen dies einer anderen Variable zu?
myvar="some string"
echo ${#myvar}
# 11
Wie weisen Sie einer anderen Variable den Wert 11
zu?
Hier sind ein paar Möglichkeiten, um die Länge einer Variablen zu berechnen:
echo ${#VAR}
echo -n $VAR | wc -m
echo -n $VAR | wc -c
printf $VAR | wc -m
expr length $VAR
expr $VAR : '.*'
Um das Ergebnis in einer anderen Variablen zu speichern, weisen Sie einfach den obigen Befehl mit Backquote einer anderen Variablen wie folgt zu:
otherVar=`echo -n $VAR | wc -m`
echo $otherVar
http://techopsbook.blogspot.in/2017/09/how-to-find-length-of-string-variable.html
Ich weiß, dass die Fragen und Antworten alt genug sind, aber heute stand ich zum ersten Mal vor dieser Aufgabe. Normalerweise habe ich die ${#var}
-Kombination verwendet, aber sie funktioniert nicht mit Unicode: der meiste Text, den ich mit Bash verarbeite, ist kyrillisch... Basierend auf der Antwort von @atesin habe ich eine kurze (und bereit, noch kürzer zu sein) Funktion erstellt, die für das Skripten verwendet werden kann. Diese Aufgabe hat mich zu dieser Frage geführt: eine Nachricht variabler Länge in einem Pseudografik-Box darzustellen. Also, hier ist es:
$ cat draw_border.sh
#!/bin/sh
#basiert auf https://stackoverflow.com/questions/17368067/length-of-string-in-bash
border()
{
local BPAR="$1"
local BPLEN=`echo $BPAR|wc -m`
local OUTLINE=\|\ "$1"\ \|
# Linie unten basierend auf https://www.cyberciti.biz/faq/repeat-a-character-in-bash-script-under-linux-unix/
# Kommentar von Bit Twiddler 5. Jun 2021 um 8:47
local OUTBORDER=\+`head -c $(($BPLEN+1))
``
Und was dieses Beispiel produziert:
$ draw_border.sh
+-------------+
| Généralités |
+-------------+
+----------------------------------+
| /usr/bin/lesspipe |
+----------------------------------+
+--------------+
| reines ENGLISCH |
+--------------+
Das erste Beispiel (in Französisch?) wurde aus dem Beispiel von jemandem oben übernommen. Das zweite kombiniert Kyrillik und den Wert einiger Variablen. Das dritte ist selbsterklärend: nur die Hälfte der ASCII-Zeichen.
Ich habe echo $BPAR|wc -m
anstelle von printf ...
verwendet, um mich nicht darauf verlassen zu müssen, ob printf vorhanden ist oder nicht.
Oben habe ich Gespräche über abschließende neue Zeilen und den -n
-Parameter für echo
gesehen. Ich habe es nicht verwendet, daher füge ich nur eins zum $BPLEN
hinzu. Sollte ich -n
verwenden, müsste ich 2 hinzufügen.
Um den Unterschied zwischen wc -m
und wc -c
zu erklären, sehen Sie dasselbe Skript mit nur einer kleinen Änderung: -m
wurde durch -c
ersetzt
$ draw_border.sh
+----------------+
| Généralités |
+----------------+
+---------------------------------------------+
| /usr/bin/lesspipe |
+---------------------------------------------+
+--------------+
| reines ENGLISCH |
+--------------+
Akzentuierte Zeichen im Lateinischen und die meisten Zeichen im Kyrillischen sind zweibyte, daher sind die Längen der gezeichneten horizontalen Linien größer als die tatsächliche Länge der Nachricht. Ich hoffe, es wird jemandem Zeit sparen :-)
P.S. Der russische Text sagt "hier ist noch ein weiterer"
P.P.S. Funktionierender "Zweizeiler"
#!/bin/sh
#basiert auf https://stackoverflow.com/questions/17368067/length-of-string-in-bash
border()
{
# Linie unten basierend auf https://www.cyberciti.biz/faq/repeat-a-character-in-bash-script-under-linux-unix/
# Kommentar von Bit Twiddler 5. Jun 2021 um 8:47
local OUTBORDER=\+`head -c $(( $(echo "$1"|wc -m) +1))
`
Um den Code nicht mit wiederholtem Zeichnen von OUTBORDER zu überladen, habe ich das Bilden von OUTBORDER in einen separaten Befehl gelegt
` ``
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.