strings estão faltando após concatenar duas ou mais strings variáveis no bash

3

Quando estou executando dois loop while e tentando concatenar duas strings variáveis (de dois loops), a saída final (string) é estranha. Eu tentei maneira diferente de concatenar, mas não obtive a resposta: Abaixo está o código: [Eu preciso de 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

Em varlists.txt

var1
var2

No model_test1.txt

My_model1
My_model2

Depois de executar o script, ele está sendo exibido

 Working on model -  My_model1
 and model number = 1
*.ncm_My_model1
*.ncm_My_model1
******************************************
    
por Palash Sinha 11.09.2016 / 09:27

1 resposta

6

Seus arquivos de texto têm Windows / DOS CRLF finais de linha .

As strings são concatenadas corretamente, mas o byte de retorno de carro é deixado no final de vname e mname , porque não faz parte de uma linha que termina em Unix e não foi usada por read . Quando você imprime a string, a exibição é desconfigurada. O transporte retorna o cursor de volta para o início da linha (como uma máquina de escrever), permitindo que o texto seja sobrescrito.

Quando você imprime algum texto com um retorno de carro nele, o texto até o CR aparece como normal, então o cursor de saída volta para o início e partes posteriores da seqüência de caracteres estão sendo impressas por cima do início partes. É por isso que o " *.nc " aparece no início da linha na saída informada, mesmo que " ${extn} " seja o último - mname termine com um retorno de carro.

Você pode executar seus arquivos de texto através de dos2unix para remover os bytes extras de retorno de carro. Você também pode usar ${vname%$'\r'} no script para truncar ao final < href="https://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting"> CRs se você não quiser ou não puder modificar os arquivos. / p>     

por 11.09.2016 / 10:19