Ich muss die Länge eines Strings nur mit einer reinen SH-Shell berechnen. Dabei handelt es sich /bin/sh
eigentlich um einen Softlink zu Bash oder einer anderen Shell. Dadurch ${#STRING}
wird die Länge des Strings als erweiterte Bash-Funktion angegeben.
Kann mir jemand sagen, wie ich die Länge einer Zeichenfolge ermitteln kann? Ich verwende die Solaris 5.10 Sparc-Architektur
Antwort1
wc -m
zählt die Zeichen in einem String. Sie können also Folgendes tun:
STRLENGTH=$(echo -n $STRING | wc -m)
Alternative Syntax:
STRLENGTH=`echo -n $STRING | wc -m`
Das -n
Flag für echo verhindert, dass eine neue Zeile gedruckt wird. Unter Solaris 5 kann das Flag anders sein. Überprüfen Sieman echo
Antwort2
Hier sind einige Möglichkeiten, dies zu tun.
myvar="This is a test"
echo "${#myvar}"
14
Oder
expr length "${myvar}"
14
Antwort3
Verwenden Sie ${#string}
, um die Länge von zu erhalten $string
.eine POSIX-Shell-ParametererweiterungEs handelt sich nicht um eine bash
einzige Funktion.
Unter Solaris 5.10, wenn /bin/sh
oder /usr/bin/sh
(wie in dersh(1)
Handbuch) dies nicht unterstützt, dann /usr/xpg4/bin/sh
wird es so sein.
Um POSIX-Verhalten auf einem Solaris 5.10-System zu erhalten, PATH
sollte Ihr
/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin
(in dieser Reihenfolge), wie beschrieben in derstandards(5)
Handbuch.
Antwort4
Ich glaube nicht, dass „reines sh“ das kann. Aber Sie müssen nichts in „reinen sh“ tun; Sie müssen es in sh plus Standard-Dienstprogrammen tun. Der einfachste Weg ist:
strlength=`expr "$string" : ".*"`
(Ausdruckist POSIX). Oder wenn Sie nicht haben expr
(Solaris 5.1 ist uralt), können Sie auch verwendenToilettezusammen mitdruckenfwie:
strlength=`printf "%s" "$string" | wc -m`
Versuchen Sie einfach nicht, zu verwenden echo
, da echo nachstehende Zeilenumbrüche hinzufügt und es keine Standardmethode gibt, dies zu unterdrücken.
Beachten Sie, dass wc -m
Zeichen und wc -c
Bytes gezählt werden, wenn es einen Unterschied im aktuellen Gebietsschema gibt.