GNU/Linux >> Belajar Linux >  >> Linux

String Hilang Setelah Menggabungkan Dua Atau Lebih String Variabel Di Bash?

Ketika saya menjalankan dua while loop dan mencoba menggabungkan dua string variabel (dari dua loop), hasil akhir (string) aneh. Saya telah mencoba berbagai cara untuk menggabungkan tetapi tidak mendapatkan jawabannya:Di bawah ini adalah kodenya:
[I need 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

Di varlists.txt

var1
var2

Di model_test1.txt

My_model1
My_model2

Setelah menjalankan skrip, itu menunjukkan

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

Jawaban yang Diterima:

File teks Anda memiliki akhiran baris Windows/DOS CRLF.

String digabungkan dengan benar, tetapi byte carriage return ditinggalkan di akhir vname dan mname , karena itu bukan bagian dari baris yang diakhiri dengan Unix dan karenanya tidak digunakan oleh read . Saat Anda mencetak string, tampilan malah hancur. Carriage return menggeser kursor kembali ke awal baris (seperti mesin tik), membiarkan teks ditimpa.

Saat Anda mencetak beberapa teks dengan carriage return di dalamnya, teks hingga CR muncul seperti biasa, lalu kursor keluaran bergerak kembali ke awal, dan kemudian bagian string selanjutnya dicetak di atas bagian sebelumnya. Itu sebabnya “*.nc ” muncul di awal baris dalam keluaran yang dilaporkan meskipun “${extn} ” terakhir – mname diakhiri dengan carriage return.

Anda dapat menjalankan file teks Anda melalui dos2unix untuk menghapus byte carriage return ekstra. Anda juga dapat menggunakan ${vname%$'r'} dalam skrip untuk memotong CR tambahan jika Anda tidak ingin atau tidak dapat mengubah file.


Linux
  1. Di Bash, bagaimana cara menambahkan string setelah setiap baris dalam file?

  2. Bagaimana cara membandingkan dua string dalam format versi yang dipisahkan titik di Bash?

  3. Bagaimana cara menulis beberapa baris string menggunakan Bash dengan variabel?

  1. Pastikan setidaknya ada dua argumen yang diberikan dalam skrip bash

  2. Shell Script, baca di baris yang sama setelah mengulang pesan

  3. Konversikan string teks dalam bash ke array

  1. Kelanjutan Baris Bash Setelah &&Dan || Didokumentasikan?

  2. skrip bash menambahkan teks ke baris pertama file

  3. Bagaimana cara membaca baris terakhir file teks menjadi variabel menggunakan Bash?