while read -r 删除第二个“\”

while read -r deletes second "\"

Here is my test file.

ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-APP-SDP-DAILY,D:\websites   ;D:\consoleapps   ;D:\Errorlogs   ;D:\Apache-Tomcat-7.0.19   ;C:\Inetpub\history   ;C:\windows\system32\msmq   ;C:\Inetpub\logs\logfiles   ;  ,05/17/2017,144.793,05/23/2017,0.116425
ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-APP-SDP-MONTHLY,D:\consoleapps   ;D:\websites   ;C:\Inetpub\history   ;C:\windows\system32\msmq   ;C:\Inetpub\logs\logfiles   ;D:\Errorlogs   ;D:\Apache-Tomcat-7.0.19   ;C:\Inetpub\history   ;C:\windows\system32\msmq   ;C:\Inetpub\logs\logfiles   ;  ,05/21/2017,145.171,No_Backup,0
ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-WIN-OS-MONTHLY,C:\   ;System State:\  ;  ,05/16/2017,31.6048,No_Backup,0
ckencogtapzp01.corp.kencell.co.ke,KE15-GENERAL-ALL-WIN-OS-MONTHLY,C:\   ;System State:\  ;Shadow Copy Components:\ ;  ,05/20/2017,33.1401,No_Backup,0

我所做的只是尝试下面的代码

echo "Client,Policy,Selection,Full_Backup_Date,Full_Size(GB),Incr_Backup_Date,Incr_Size(GB)" > /tmp/testfinal.csv
            while read -r valid
            do
                           active=`sudo /usr/openv/netbackup/bin/admincmd/bppllist $(echo $valid | awk -F "," '{print }') -l | grep "INFO" |awk '{print }'`

                           if [ "$active" -eq 0 ]
                           then
                                           echo $valid >> /tmp/test_final.csv
                           else
                                           full=`echo $valid | awk -F "," '{print }'`
                                           incr=`echo $valid | awk -F "," '{print }'`
                                           if [ "$full" != "No_Backup" ] && [ "$incr" != "No_Backup" ]
                                           then
                                                            echo $valid >> /tmp/testfinal.csv
                                           fi
                           fi
            done</tmp/test.csv

出于某种原因,它删除了第二个“\”并添加了下一行

这是输出。

ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-APP-SDP-DAILY,D:\websites ;D:ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-APP-SDP-MONTHLY,D:ckencogtapzp01.corp.kencell.co.ke,KE13-CKENCOGTAPZP01-WIN-OS-MONTHLY,C:\ ;System State:\ ; ,05/16/2017,31.6048,No_Backup,0
ckencogtapzp01.corp.kencell.co.ke,KE15-GENERAL-ALL-WIN-OS-MONTHLY,C:\ ;System State:\ ;Shadow Copy Components:\ ; ,05/20/2017,33.1401,No_Backup,0

不知道为什么,我试过 IFS=' ' 因为它将忽略 test.csv 中的白色 space 但结果是相同的。我很想知道为什么它在看到“\c”时删除并添加下一行,然后在遇到“\c”时再次删除。

有什么建议吗?

看来你的 echo $valid 是罪魁祸首。 echo 的某些版本解释反斜杠序列。特别是,\c 用作 "suppress newline" 转义符。

printf %s "$valid"会更好

或者,如果您需要在 echo 通常添加的末尾换行:printf '%s\n%' "$valid"

不是while,aix,IFS的问题,是遇到了echo中的\c"suppress further output",我换成printf解决了问题