Cómo encontrar la longitud de una cuerda en Shell

Cómo encontrar la longitud de una cuerda en Shell

Necesito calcular la longitud de una cadena usando únicamente sh shell. Lo que sucede es que /bin/shen realidad es un enlace suave a bash u otro shell. Por lo tanto, ${#STRING}proporciona la longitud de la cadena como característica avanzada de bash.

¿Alguien puede decirme cómo puedo encontrar la longitud de una cuerda? Estoy usando la arquitectura Solaris 5.10 Sparc.

Respuesta1

wc -mcuenta los caracteres en una cadena. Entonces puedes hacer algo como:

STRLENGTH=$(echo -n $STRING | wc -m)

Sintaxis alternativa:

STRLENGTH=`echo -n $STRING | wc -m`

La -nbandera de eco evita que imprima una nueva línea. La bandera puede ser diferente en Solaris 5. Verificarman echo

Respuesta2

Aquí hay un par de formas de hacerlo.

myvar="This is a test"
echo "${#myvar}"
14

O

expr length "${myvar}"
14

Respuesta3

Usando ${#string}para obtener la longitud de $stringesuna expansión de parámetros de shell POSIX. No es una bashcaracterística exclusiva.

En Solaris 5.10, si /bin/sho /usr/bin/sh(como se menciona en elsh(1)manual) no admite esto, entonces /usr/xpg4/bin/shlo hará.

Para obtener el comportamiento POSIX en un sistema Solaris 5.10, debe PATHconfigurarlo en

/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin

(en ese orden), como se describe en elstandards(5)manual.

Respuesta4

No creo que la "pura mierda" pueda hacerlo. Pero no es necesario hacer nada en "puro sh"; debes hacerlo en sh plus con las utilidades estándar. La forma más sencilla es:

strlength=`expr "$string" : ".*"`

(expréses POSIX). O si no lo tiene expr(Solaris 5.1 es antiguo), también puede usarWCJuntos conimprimirfcomo:

strlength=`printf "%s" "$string" | wc -m`

Simplemente no intentes usar echo, porque echo agregará nuevas líneas al final y no existe una forma estándar de suprimirlo.

Tenga en cuenta que wc -mcuenta caracteres y wc -ccuenta bytes si hay una diferencia en la configuración regional actual.

información relacionada