文字列をエコーし​​ますが、出力に疑問符を追加します。

文字列をエコーし​​ますが、出力に疑問符を追加します。

ファイル名の出力に奇妙な「?」が追加されました。

SCRIPTS="/path_to_script/"
SUMMER=`cat /path_to_file/summer.txt`

for i in ${SUMMER};
  do cat <<- EOF > $SCRIPTS/20190430_$(echo ${i})_step4.r
#content omit
EOF
   done

予想される結果は次のとおりです。

20190430_spring1_step4.r
20190430_spring2_step4.r
20190430_summer1_step4.r
20190430_summer2_step4.r

ただし、.txtの最後の行を除くすべての変数の後に疑問符が表示されます${SUMMER}

20190430_spring1?_step4.r
20190430_spring2?_step4.r
20190430_summer1?_step4.r
20190430_summer2_step4.r

問題は何ですか? ${SUMMER}列が1つしかないtxtファイル。

答え1

このファイルには以下が含まれています。CR+LF (DOS/Windows スタイル) 行末。この疑問符はただls生き残った CR 文字を表します。。 CR文字がファイル名に存在します。姓が働きます。それはおそらく、ファイルの最後の行に行末がまったくないからです。

この通話を確認するにはfile /path_to_file/summer.txt。ツールが「CRLF行終端」について教えているようです。

dos2unix最初はファイルをUnix形式に変換するために使用されました。

関連情報