faltan cadenas después de concatenar dos o más cadenas variables en bash

Cuando estoy ejecutando dos ciclos while e bash de concatenar dos cadenas de variables (desde dos loops), la salida final (cadena) es extraña. He intentado una forma diferente de concatenar pero no vfile="var1_Amon_My_model1*.nc" la respuesta: A continuación está el código: [Necesito 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 

En varlists.txt

 var1 var2 

En model_test1.txt

 My_model1 My_model2 

Después de ejecutar el script, está mostrando

  Working on model - My_model1 and model number = 1 *.ncm_My_model1 *.ncm_My_model1 ****************************************** 

Sus files de text tienen terminaciones de línea CRLF de Windows / DOS.

Las cadenas se concatenan correctamente, pero el byte de retorno del carro se deja al final de vname y mname , porque no forma parte de una línea que finaliza en Unix y, por lo tanto, no se utilizó por read . Cuando imprime la cadena, la pantalla se destroza. El retorno de carro desplaza el cursor de vuelta al comienzo de la línea (como una máquina de escribir), permitiendo que el text se sobrescriba.

Cuando imprime un text con un retorno de carro, el text hasta el CR aparece como normal, luego el cursor de salida vuelve al inicio y luego las partes posteriores de la cadena se imprimen sobre la parte superior de las partes anteriores. Es por eso que " *.nc " aparece al principio de la línea en la salida informada, aunque " ${extn} " es la última: mname finaliza con un retorno de carro.

Puede ejecutar sus files de text a través de dos2unix para eliminar los bytes de retorno de carro adicionales. También puede usar ${vname%$'\r'} en la secuencia de commands para truncar los CR finales si no quiere o no puede modificar los files.