Bashで複数の変数文字列を連結した後、文字列が失われました。

Bashで複数の変数文字列を連結した後、文字列が失われました。

2つのwhileループを実行して2つの変数文字列(両方のループで)を連結しようとすると、最終出力(文字列)が変わります。さまざまな接続方法を試しましたが、応答を受け取りませんでした。コードは次のとおりです。 [必要です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

varlists.txtから

var1
var2

model_test1.txtから

My_model1
My_model2

スクリプトの実行後に表示される

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

ベストアンサー1

テキストファイルにWindows / DOS CRLFがあります。行末

文字列連結は正確ですが、キャリッジリターンバイトはUnixの終了行の一部ではないため、すべて使用されていないため、vname合計の終わりに残ります。文字列を印刷すると、mnameread展示するしかし、それは破壊されました。 Enterキーを押すと、カーソルが行の先頭に戻り(タイプライターと同様に)テキストを上書きできます。

キャリッジリターンを使用して一部のテキストを印刷すると、CRまでのテキストが正常に表示され、出力カーソルが最初に戻され、文字列の後半が前の部分の上に印刷されます。これが、「」がキャリッジリターンで終わる最後の行で*.ncあるにもかかわらず、レポート出力の行の先頭に表示される理由です。${extn}mname

テキストファイルを実行して、追加のdos2unixキャリッジリターンバイトを削除できます。${vname%$'\r'}スクリプトで使用することもできます。カット続くCRファイルを変更したくない場合、または変更できない場合。

おすすめ記事