重击回声怪异行为

时间:2018-10-14 13:19:36

标签: linux bash shell newline carriage-return

我写了一个脚本,将.CSV更改为json。

#!/bin/bash

exec 0< example.csv

while IFS=, read name element input decrease
do
   echo "${element}decrease: ${decrease}test"
done

我粘贴在此处的example.csv

name1,A,11,12
name2,B,13,14

但是输出确实很奇怪...

testrease: 12
testrease: 14

如您所见,test重写了AdecreaseBdecrease,使它们变为testrease

我不敢相信!!因此,我尝试使用exec 0< example.csv,在stdin中键入它们,这一次我得到了想要的

name1,A,11,12
Adecrease: 12test

所以我想也许在example.csv中有一些字符,我看不到是什么导致了这个问题。我使用cat -v example.csv

name1,A,11,12^M
name2,B,13,14^M

没什么奇怪的,我被困在这里。

我对Shell脚本很陌生,所以如果有人可以给我一些建议,我将非常兴奋!!

1 个答案:

答案 0 :(得分:0)

谢谢你,@chepnertag wiki在这个愚蠢的问题上又节省了我一个小时。

这是Wiki的解决方案:

  

检查您的脚本或数据是否具有DOS样式的行尾字符。

     
      
  • 使用cat -v yourfileecho "$yourvariable" | cat -v

         

    DOS回车将在每一行后显示为^M

         

    如果找到它们,请使用dos2unix(又称fromdos)或tr -d '\r'删除它们。

  •