2014-01-20 120 views
2

我有一個讀取循環,它正在讀取一個變量,但不像我期望的那樣行爲。我想讀取變量的每一行並處理每一行。這裏是我的循環:bash讀取循環只讀取輸入變量的第一行

while read -r line 
do 
    echo $line | sed 's/<\/td>/<\/td>$/g' | cut -d'$' -f2,3,4 >> file.txt 
done <<< "$TABLE" 

我期望它處理文件的每一行,但它只是做第一個。如果我的中間是簡單的echo $ line >> file.txt,它按預期工作。這裏發生了什麼?我如何得到我想要的行爲?

+3

你能告訴'貓-vte <<< 「$表」'輸出 – anubhava

+0

輸出僅僅是'$' –

+0

所以你原來的字符串'$ TABLE'是空的? – anubhava

回答

0

看起來你的線條被\r而不是\n分隔。

使用此While循環來重複利用的read -d $'\r'輸入:

while read -rd $'\r' line; do 
    echo "$line" | sed 's~</td>~</td>$~g' | cut -d'$' -f2,3,4 >> file.txt 
done <<< "$TABLE" 
+0

工作就像一個魅力! –

+0

不客氣,很高興它解決了。 – anubhava

0

如果$TABLE包含一個多行字符串,我建議

printf '%s\n' "$TABLE" | 
while read -r line; do 
    echo $line | sed 's/<\/td>/<\/td>$/g' | cut -d'$' -f2,3,4 >> file.txt 
done 

這也更加便攜,因爲「< < <」運營商在這裏串是不是POSIX。