2017-09-15 2 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 ''を持っています。これは '' 'に上書きされます。 CR _before_変数の置換が発生すると、そのCRを削除する必要があります。 'tr -d '\ r"への配管をお勧めします。 – Siguza

答えて

1

ヨーur DATABASE_LISTファイルはDOS/Windows形式であり、各行の終わりに改行+改行が入ります。 Unixは行終端記号としてラインフィードだけを使用するので、unixツールは行の内容の一部としてキャリッジリターンを扱います。

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

注:readが自動的に行の先頭と末尾から空白を削除しますので、あなたは、(スペース、タブ、などなど)空白としてキャリッジリターンを治療するためのreadコマンドを伝えることで、問題であることから、これを維持することができますIFSへのこの割り当て(基本的に空白文字のリスト)はreadコマンドへの接頭辞であるため、その1つのコマンドにのみ適用され、後で通常に戻す必要はありません。

+0

Gordonに感謝します。以前はこの問題を抱えていましたが、DOS/Windowsの問題ではないと思っていました。コードもありがとう。それは今働いている。ファイルを削除して正しく再作成しました – aymanzone

関連する問題