在 bash 中连接两个或多个变量字符串后缺少字符串

Pal*_*nha 4 shell bash string

当我运行两个 while 循环并尝试连接两个变量字符串(来自两个循环)时,最终输出(字符串)很奇怪。我尝试了不同的连接方式,但没有得到答案:下面是代码:[我需要vfile="var1_Amon_My_model1*.nc"]

#!/bin/bash
jcount=1
extn="*.nc"
while read line
do
mname=$line
echo " Working on model - " $mname
echo " and model number = "$jcount
while read line
do
vname=$line
vfile="${vname}""_Anom_""${mname}""${extn}"
echo $vfile
done<varlists.txt
echo "******************************************"
jcount=$((jcount+1))
done<model_test1.txt
Run Code Online (Sandbox Code Playgroud)

在 varlists.txt 中

var1
var2
Run Code Online (Sandbox Code Playgroud)

在model_test1.txt

My_model1
My_model2
Run Code Online (Sandbox Code Playgroud)

执行脚本后,显示

 Working on model -  My_model1
 and model number = 1
*.ncm_My_model1
*.ncm_My_model1
******************************************
Run Code Online (Sandbox Code Playgroud)

Mic*_*mer 8

您的文本文件具有 Windows/DOS CRLF行尾

字符串正确连接,但回车字节留在vnameand的末尾mname,因为它不是 Unix 上的行结尾的一部分,因此没有被read. 当您打印出字符串时,显示会被破坏。回车将光标移回行首(就像打字机一样),让文本被覆盖。

当您打印一些带有回车符的文本时,CR 之前的文本正常显示,然后输出光标移回开头,然后字符串的后面部分将打印在前面部分的顶部。这就是为什么“ *.nc”出现在报告输出中的行首的原因,即使“ ${extn}”是最后一个 -mname以回车结束。

您可以运行文本文件dos2unix以删除额外的回车字节。如果您不想或不能修改文件,也可以${vname%$'\r'}在脚本中使用来截断尾随CR