
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
合計の終わりに残ります。文字列を印刷すると、mname
read
展示するしかし、それは破壊されました。 Enterキーを押すと、カーソルが行の先頭に戻り(タイプライターと同様に)テキストを上書きできます。
キャリッジリターンを使用して一部のテキストを印刷すると、CRまでのテキストが正常に表示され、出力カーソルが最初に戻され、文字列の後半が前の部分の上に印刷されます。これが、「」がキャリッジリターンで終わる最後の行で*.nc
あるにもかかわらず、レポート出力の行の先頭に表示される理由です。${extn}
mname
テキストファイルを実行して、追加のdos2unix
キャリッジリターンバイトを削除できます。${vname%$'\r'}
スクリプトで使用することもできます。カット続くCRファイルを変更したくない場合、または変更できない場合。