So ermitteln Sie die Länge einer Zeichenfolge in der Shell

So ermitteln Sie die Länge einer Zeichenfolge in der Shell

Ich muss die Länge eines Strings nur mit einer reinen SH-Shell berechnen. Dabei handelt es sich /bin/sheigentlich 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 -mzä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 -nFlag 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 basheinzige Funktion.

Unter Solaris 5.10, wenn /bin/shoder /usr/bin/sh(wie in dersh(1)Handbuch) dies nicht unterstützt, dann /usr/xpg4/bin/shwird es so sein.

Um POSIX-Verhalten auf einem Solaris 5.10-System zu erhalten, PATHsollte 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 -mZeichen und wc -cBytes gezählt werden, wenn es einen Unterschied im aktuellen Gebietsschema gibt.

verwandte Informationen