删除变量的回车结束

时间:2017-09-15 20:38:06

标签: bash

我为这个程序得到了非常奇怪的输出。什么是"回程"做,以及如何删除它 - 最终缺少单引号?为什么这封信" 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

我读取的文件没有损坏,是一个有两行的小文件

[oracle@ot1sldbm001v test2]$ cat /opt/halogen/crontab/etc/db_stat_list.cfg
asp_dba/dba OT1SL010
asp_dba/dba OT1SL80

谢谢

1 个答案:

答案 0 :(得分:1)

您的DATABASE_LIST文件是DOS / Windows格式,每行末尾都有回车+换行符。 Unix只使用换行作为行终止符,因此unix工具将回车视为行内容的一部分。您可以通过告诉read命令将回车处理为空格(如空格,制表符等)来保持此问题,因为read会自动从行的开头和结尾删除空格:

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

请注意,由于对IFS(基本上列出空白字符)的赋值是read命令的前缀,因此它仅适用于那一个命令而不必返回之后变得正常。