2013-03-15 28 views
10

我有一個包含兩列信息的文件:管道文件一行一行到多個讀變量

box1 a1 
box2 a2 

我試圖逐行讀取這個文件到線讀取,並有各行的項目放變成一個變量

第一次通過時,$a將包含box1$b將包含a1

在第二遍,$a將包含box2$b將包含a2

,我用努力實現代碼的一個例子是這樣的:

for i in text.txt; do 
    while read line; do 
    echo $line | read a b; 
    done < text.txt; 
    echo $a $b; 
done 

這使我得到以下結果:

box1 a1 box2 a2 

當我預料到以下結果:

box1 a1 
box2 a1 

我該如何解決這個問題?

回答

27

管道變成read命令導致變量設置在一個子shell中,這使得它們不可訪問(實際上它們已經消失)到代碼的其餘部分。在這種情況下,您甚至不需要for循環或第二個read命令:

while read -r a b; do 
    echo $a $b 
done < text.txt 
+0

賓果!這就像一個魅力..謝謝你的解釋,它爲我清除了事情。 (@chepner和@Dave Jarvis ..謝謝!) – mlebel 2013-03-15 22:44:45

+0

如果你可以在你的輸入中有'\',不要忘記使用'-r'參數來讀取。 – jfg956 2013-03-16 01:29:31

+0

@jfgagne,我研究了-r,並在oracle文檔中找到了以下內容 - 「默認情況下,除非指定了-r選項,否則反斜槓(\\)充當轉義字符。」這是你的意思嗎? – mlebel 2013-03-16 23:53:31

相關問題