我有一个bash脚本,可以选择两个单词并将它们连接起来。
#!/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
这里发生的是最终输出是形容词在名词末尾的最后一个字母。为什么会这样,我该如何阻止呢?
在这里有这种现象的相关性:https://asciinema.org/a/199297
答案 0 :(得分: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