2017-09-15 59 views
0

我得到這個程序非常奇怪的輸出。什麼是「回車」行爲,以及如何將其刪除 - 最終缺少單引號?爲什麼字母「T」缺失?如何編寫代碼來糾正這個問題?刪除變量的回車末端

代碼我使用

#!/bin/bash 

export DATABASE_LIST="/opt/halogen/crontab/etc/db_stat_list.cfg" 
export v3="" 

while read -r USERID ORACLE_SID2 
do 
v3="This is '${ORACLE_SID2}' " 
echo $v3 
done < <(tac $DATABASE_LIST) 

輸出

'his is 'OT1SL80 
'his is 'OT1SL010 

我從閱讀的文件不是腐敗,是一個小兩行

[[email protected] test2]$ cat /opt/halogen/crontab/etc/db_stat_list.cfg 
asp_dba/dba OT1SL010 
asp_dba/dba OT1SL80 

謝謝

+1

你有'這是'OT1SL80 '......這意味着'''覆蓋'T'。您需要刪除CR _before_變量替換髮生。我建議用管道連接到'tr -d'\ r''。 – Siguza

回答

1

Yo你的DATABASE_LIST文件是DOS/Windows格式,在每行的末尾有回車+換行符。 Unix只使用換行符作爲行終止符,所以unix工具將回車視爲行內容的一部分。您可以從被告訴read命令對待回車爲空白(如空格,製表符等)問題保持這個,因爲read自動線的開頭和結尾刪除空格:

... 
while IFS="$IFS"$'\r' read -r USERID ORACLE_SID2 
    ... 

注由於對IFS(基本上列出空白字符)的分配是read命令的前綴,因此它僅適用於該命令,並且不必在之後恢復正常。

+0

謝謝戈登,我花了幾個小時沒有想到它是一個DOS/Windows問題,雖然我以前有過這個問題。也感謝代碼。它正在工作。我刪除了文件並正確地重新創建了它 – aymanzone