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 -n1
el 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 $a
cual 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 cut
a 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.