Hvorfor er min echo kommandoen skrive to ord over hverandre?

stemmer
0

Jeg har en bash script som plukker to ord og (bør) sette sammen dem.

#!/bin/bash

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

echo ADJ $adj
echo NOU $noun

echo $adj $noun

Variablene blir satt riktig, men for noen grunn, ikke den endelige ekkoet ikke fungere riktig. For eksempel:

ADJ humbler
NOU lyric
 lyricr

Eller:

ADJ bipinnate
NOU lipases
 lipasese

Hva som skjer her er at det endelige resultatet er adjektivet siste brev i slutten av substantiv. Hvorfor er dette, og hvordan kan jeg stoppe det?

Det er en Asciinema av dette fenomenet her: https://asciinema.org/a/199297

Publisert på 02/09/2018 klokken 05:40
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Dine innspill filer mest sannsynlig har CRLF ( \r\n) linjeavslutninger. Den \r(linjeskift) vil føre til at produksjonen for å hoppe tilbake til den første kolonnen av gjeldende linje, som sammensetning blir kvitt \nog ikke \r.

Det er formatet som brukes av Windows / DOS.

Du kan enten konvertere filene, eller du kan fjerne den ut med tr, for eksempel:

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

Du kan også kjøre dette over filene i stedet, for eksempel:

tr -d '\r' < adjectives.txt > adjectives-reformatted.txt
Svarte 02/09/2018 kl. 05:50
kilden bruker

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