Bash脚本-变量连接

Bash脚本-变量连接,bash,shell,Bash,Shell,对Linux和Bash脚本完全陌生,我一直在尝试以下脚本: declare -a names=("Liam" "Noah" "Oliver" "William" "Elijah") declare -a surnames=("Smith" "Johnson" "Williams" "Brown" "Jones

对Linux和Bash脚本完全陌生,我一直在尝试以下脚本:

declare -a names=("Liam" "Noah" "Oliver" "William" "Elijah")
declare -a surnames=("Smith" "Johnson" "Williams" "Brown" "Jones")
declare -a countries=()
readarray countries < $2
i=5
id=1
while [ $i -gt 0 ]
do
  i=$(($i - 1))
  rname=${names[$RANDOM % ${#names[@]}]}
  rsurname=${surnames[$RANDOM % ${#surnames[@]}]}
  rcountry=${countries[$RANDOM % ${#countries[@]}]}
  rage=$(($RANDOM % 5))
  record="$id $rname $rsurname $rcountry"
  #record="$id $rname $rsurname $rcountry $rage"
  echo $record
  id=$(($id + 1))
done
但是当行
record=“$id$rname$rsurname$rccountry”
得到注释时,问题就变得很明显了,并且行
record=“$id$rname$rsurname$rccountry$rage”
处于活动状态,第二次执行时的确切输出是:

 4William Johnson Albania
 2Elijah Smith Albania
 2Oliver Brown Argentina
 0William Williams Argentina
 3Oliver Brown Angola
我从中读取国家的文件如下所示:

Albania
Algeria
Andorra
Angola
Argentina

您能解释一下为什么会发生这种情况吗?

您的国家/地区输入文件具有DOS样式的
(回车换行)行结尾

从文件中读取行时,
countries
数组的每个元素最终看起来像
somename
,打印时
将光标移回行的开头,因此
$rage
的内容最终覆盖行的开头


修复方法是将您的国家/地区输入转换为使用Unix样式(
仅限)行结尾。例如,您可以使用
dos2unix>
执行此操作。

您的国家/地区输入文件具有DOS样式的
(回车换行符)行结尾

从文件中读取行时,
countries
数组的每个元素最终看起来像
somename
,打印时
将光标移回行的开头,因此
$rage
的内容最终覆盖行的开头

修复方法是将您的国家/地区输入转换为使用Unix样式(
仅限)行结尾。例如,您可以使用
dos2unix>
来执行此操作

Albania
Algeria
Andorra
Angola
Argentina