Saltar al contenido

Leer caracter por caracter con bash read

Hacemos una revisión completa cada enunciados en nuestra página web con el objetivo de mostrarte en todo momento la información con la mayor veracidad y actualizada.

Solución:

Debe eliminar los espacios en blanco de la $IFS parámetro para read para dejar de omitir los primeros y los finales (con -n1el carácter de espacio en blanco, si lo hubiera, sería tanto inicial como final, por lo que se omite):

while IFS= read -rn1 a; do printf %s "$a"; done

Pero incluso entonces bash read omitirá los caracteres de nueva línea, con los que puede trabajar:

while IFS= read -rn1 a; do printf %s "$a:-$'n'"; done

Aunque podrías usar IFS= read -d '' -rn1 en su lugar o incluso mejor IFS= read -N1 (agregado en 4.1, copiado de ksh93 (agregado en o)) que es el comando para leer un carácter.

Tenga en cuenta que bash read no puede hacer frente a los caracteres NUL. Y ksh93 tiene los mismos problemas que bash.

Con zsh:

while read -ku0 a; do print -rn -- "$a"; done

(zsh puede hacer frente a caracteres NUL).

Tenga en cuenta que esos read -k/n/N leer un número de caracteresno bytes. Entonces, para los caracteres de varios bytes, es posible que tengan que leer varios bytes hasta que se lea un carácter completo. Si la entrada contiene caracteres no válidos, puede terminar con una variable que contiene una secuencia de bytes que no forman caracteres válidos y que el shell puede terminar contando como varios caracteres. Por ejemplo, en una configuración regional UTF-8:

$ printf '375200200200200ABC' | bash -c '
    IFS= read  -rN1 a; echo "$#a"'
6

Ese 375 introduciría un carácter UTF-8 de 6 bytes. Sin embargo, el sexto (A) anterior no es válido para un carácter UTF-8. Todavía terminas con 375200200200200A en $acual bash cuenta como 6 caracteres aunque los primeros 5 no son realmente caracteres, solo 5 bytes que no forman parte de ningún carácter.

Este es un ejemplo simple usando cuta for círculo & wc :

bytes=$(wc -c < /etc/passwd)
file=$(

BESO no?

Sección de Reseñas y Valoraciones

Si para ti ha sido de provecho este artículo, sería de mucha ayuda si lo compartieras con el resto seniors de este modo nos ayudas a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *