Почему моя эхо команда писать два слова друг над другом?

голоса
0

У меня есть Баш скрипт, который выбирает два слова и (должны) объединить их.

#!/bin/bash

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

echo ADJ $adj
echo NOU $noun

echo $adj $noun

Переменные быть установлены правильно, но по какой-то причине, окончательное эхо не работает правильно. Например:

ADJ humbler
NOU lyric
 lyricr

Или же:

ADJ bipinnate
NOU lipases
 lipasese

То, что здесь происходит то, что конечный результат является последней буквой прилагательного в конце существительного. Почему это, и как я могу остановить это?

Существует Asciinema этого явления здесь: https://asciinema.org/a/199297

Задан 02/09/2018 в 05:40
источник пользователем
На других языках...                            


1 ответов

голоса
1

Ваши входные файлы , скорее всего, CRLF ( \r\nокончания строк). \r(Возврат каретки) вызовет выход для перехода обратно к первому столбцу текущей строки, так как ваш конкатенации избавляется от \nи не \r.

Это формат, используемый в Windows / DOS.

Вы можете конвертировать файлы, или вы можете лишить его использование tr, например:

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

Вы также можете запустить через файлы вместо этого, например:

tr -d '\r' < adjectives.txt > adjectives-reformatted.txt
Ответил 02/09/2018 в 05:50
источник пользователем

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