yoast titulo name longitud length keywords description content contador caracteres bash variables string-length

titulo - Longitud de la cuerda en bash



title seo length (10)

¿Cómo se obtiene la longitud de una cadena almacenada en una variable y se asigna a otra variable?

myvar="some string" echo ${#myvar} # 11

¿Cómo se configura otra variable para la salida 11 ?


Longitud de la cadena UTF-8

Además de la respuesta correcta de fedorqui , me gustaría mostrar la diferencia entre la longitud de la cadena y la longitud del byte:

myvar=''Généralités'' chrlen=${#myvar} oLang=$LANG oLcAll=$LC_ALL LANG=C LC_ALL=C bytlen=${#myvar} LANG=$oLang LC_ALL=$oLcAll printf "%s is %d char len, but %d bytes len./n" "${myvar}" $chrlen $bytlen

renderizará:

Généralités is 11 char len, but 14 bytes len.

Incluso podrías echar un vistazo a los caracteres almacenados:

myvar=''Généralités'' chrlen=${#myvar} oLang=$LANG oLcAll=$LC_ALL LANG=C LC_ALL=C bytlen=${#myvar} printf -v myreal "%q" "$myvar" LANG=$oLang LC_ALL=$oLcAll printf "%s has %d chars, %d bytes: (%s)./n" "${myvar}" $chrlen $bytlen "$myreal"

Responderé:

Généralités has 11 chars, 14 bytes: ($''G/303/251n/303/251ralit/303/251s'').

Nota: De acuerdo con el comentario de Isabell Cowan , he agregado la configuración a $LC_ALL junto con $LANG .

Duración de un argumento

Argumento funciona igual que las variables regulares

strLen() { local bytlen sreal oLang=$LANG oLcAll=$LC_ALL LANG=C LC_ALL=C bytlen=${#1} printf -v sreal %q "$1" LANG=$oLang LC_ALL=$oLcAll printf "String ''%s'' is %d bytes, but %d chars len: %s./n" "$1" $bytlen ${#1} "$sreal" }

trabajará como

strLen théorème String ''théorème'' is 10 bytes, but 8 chars len: $''th/303/251or/303/250me''

Herramienta de corrección de printf útil:

Si tu:

for string in Généralités Language Théorème Février "Left: ←" "Yin Yang ☯";do printf " - %-14s is %2d char length/n" "''$string''" ${#string} done - ''Généralités'' is 11 char length - ''Language'' is 8 char length - ''Théorème'' is 8 char length - ''Février'' is 7 char length - ''Left: ←'' is 7 char length - ''Yin Yang ☯'' is 10 char length

No es realmente bonito ... Para esto, hay una pequeña función:

strU8DiffLen () { local bytlen oLang=$LANG oLcAll=$LC_ALL LANG=C LC_ALL=C bytlen=${#1} LANG=$oLang LC_ALL=$oLcAll return $(( bytlen - ${#1} )) }

Entonces ahora:

for string in Généralités Language Théorème Février "Left: ←" "Yin Yang ☯";do strU8DiffLen "$string" printf " - %-$((14+$?))s is %2d chars length, but use %2d bytes/n" / "''$string''" ${#string} $((${#string}+$?)) done - ''Généralités'' is 11 chars length, but use 14 bytes - ''Language'' is 8 chars length, but use 8 bytes - ''Théorème'' is 8 chars length, but use 10 bytes - ''Février'' is 7 chars length, but use 8 bytes - ''Left: ←'' is 7 chars length, but use 9 bytes - ''Yin Yang ☯'' is 10 chars length, but use 12 bytes


Aquí hay algunas formas de calcular la longitud de la variable:

echo ${#VAR} echo -n $VAR | wc -m echo -n $VAR | wc -c printf $VAR | wc -m expr length $VAR expr $VAR : ''.*''

y para establecer el resultado en otra variable, simplemente asigne el comando anterior con comillas en otra variable de la siguiente manera:

otherVar=`echo -n $VAR | wc -m` echo $otherVar

http://techopsbook.blogspot.in/2017/09/how-to-find-length-of-string-variable.html


En respuesta al inicio del post:

Si desea utilizar esto con la línea de comandos o argumentos de función ...

con el código:

size=${#1}

Puede darse el caso de que solo desee verificar un argumento de longitud cero y no tenga necesidad de almacenar una variable. Creo que puedes usar este tipo de sintaxis:

if [ -z "$1" ]; then #zero length argument else #non-zero length fi

Consulte GNU y wooledge para obtener una lista más completa de expresiones condicionales de Bash.


Estaba tratando de hacer algo similar, pero solo quería asegurarme de que la entrada del usuario no fuera demasiado larga.

if [ ${#string} -ge 12 ]; then echo ">= 12 characters. too long" exit else echo "under 12 characters, not too long." fi


Para obtener la longitud de una cadena almacenada en una variable, diga:

myvar="some string" size=${#myvar}

Para confirmar que se guardó correctamente, echo :

$ echo "$size" 11


Puedes usar:

MYSTRING="abc123" MYLENGTH=$(printf "%s" "$MYSTRING" | wc -c)

  • wc -c o wc --bytes bytes para conteos de bytes = Los caracteres Unicode se cuentan con 2, 3 o más bytes.
  • wc -m o wc --chars para conteos de caracteres = Los caracteres Unicode se cuentan solos hasta que usan más bytes.

Quería el caso más simple, finalmente este es un resultado:

echo -n ''Tell me the length of this sentence.'' | wc -m; 36


Si desea usar esto con la línea de comandos o los argumentos de la función, asegúrese de usar size=${#1} lugar de size=${#$1} . El segundo puede ser más instintivo pero la sintaxis es incorrecta.


Usando su ejemplo proporcionado

#KISS (Keep it simple stupid) size=${#myvar} echo $size


Yo usaría algo como esto:

var2=$(echo $myvar | wc -c)

No necesitas un guión.