我为这个程序得到了非常奇怪的输出。什么是"回程"做,以及如何删除它 - 最终缺少单引号?为什么这封信" 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
谢谢
答案 0 :(得分:1)
您的DATABASE_LIST文件是DOS / Windows格式,每行末尾都有回车+换行符。 Unix只使用换行作为行终止符,因此unix工具将回车视为行内容的一部分。您可以通过告诉read
命令将回车处理为空格(如空格,制表符等)来保持此问题,因为read
会自动从行的开头和结尾删除空格:
...
while IFS="$IFS"$'\r' read -r USERID ORACLE_SID2
...
请注意,由于对IFS
(基本上列出空白字符)的赋值是read
命令的前缀,因此它仅适用于那一个命令而不必返回之后变得正常。