¿Por qué mi comando echo escribiendo dos palabras más de uno al otro?

votos
0

Tengo un script bash que recoge dos palabras y (debería) concatenar.

#!/bin/bash

adj=$(shuf -n1 adjectives.txt)
noun=$(shuf -n1 nouns.txt)

echo ADJ $adj
echo NOU $noun

echo $adj $noun

Las variables están ajustadas correctamente, pero por alguna razón, el último eco no funciona bien. Por ejemplo:

ADJ humbler
NOU lyric
 lyricr

O:

ADJ bipinnate
NOU lipases
 lipasese

¿Qué está pasando aquí es que el resultado final es la última carta del adjetivo al final del sustantivo. ¿Por qué es esto y cómo puedo evitarlo?

Hay una Asciinema de este fenómeno aquí: https://asciinema.org/a/199297

Publicado el 02/09/2018 a las 05:40
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Sus archivos de entrada más probable es que tienen CRLF ( \r\nfinales de línea). El \r(retorno de carro) hará que la salida para saltar de nuevo a la primera columna de la línea actual, como su concatenación se deshace de la \ny no el \r.

Ese es el formato utilizado por Windows / DOS.

Usted puede convertir los archivos, o puede despojar a cabo utilizando tr, por ejemplo:

adj="$(shuf -n1 adjectives.txt | tr -d '\r')"
noun="$(shuf -n1 nouns.txt | tr -d '\r')"

También puede ejecutar esto a través de los archivos en lugar, por ejemplo:

tr -d '\r' < adjectives.txt > adjectives-reformatted.txt
Respondida el 02/09/2018 a las 05:50
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more