2012-10-09 56 views
3

我正在逐行讀取文件中的參數,但每行都有多個參數。代碼的要點低於Bash:從文件逐行傳遞參數

cat file.txt | while read LINE ; do 
    echo -e `./foo.sh "$COUNT" "$LINE"` 
done 

foo.sh

#!/bin/bash 
echo "$2\t$3\t$4" 

file.txt的

0 0 0 
0 0 1 
0 1 0 
0 0 1 

返回。注意它不是標籤

0 0 0 
0 0 1 
0 1 0 
0 0 1 

這是我想要做的更簡單的例子;我的foo.sh實際上是使用參數進行SQL調用。我知道我的foo.sh函數通過調試起作用,所以我將它縮小到了線閱讀器。任何幫助,我要去哪裏錯了?

回答

2

我認爲你需要做的要麼:

  1. 引文結束變量
  2. 評估和演示字符串

,使其成爲可以:

echo -e `./foo.sh "$COUNT" $LINE` 

echo -e `eval ./foo.sh "$COUNT" "$LINE"` 

否則bash會將foo.sh作爲單個參數傳遞給$LINE。通過明確地評估它,bash將首先生成最終的命令字符串,然後重新解釋它,實際上將$LINE分成單獨的參數。

希望這有助於=)

+0

完美。我試了兩次,兩種解決方案都使它正常工作。哪種解決方案更好? – TheTargetmobile

+0

這兩種解決方案的工作?涼!我以爲他們必須在一起。我想後面的引用與eval類似。我寧願使用沒有eval的選項,然後=) –

+0

我編輯答案以供將來參考。謝謝! –

1

是否有你的迴音巢外命令,原因是什麼?那樣的事情呢?我只是將-e添加到foo.sh中的回顯中,並在外部調用中取出了回顯。

cat foo.txt | while read LINE ; do 
    ./foo.sh $COUNT $LINE 
done 

foo.sh:

#!/bin/bash 
echo -e "$2\t$3\t$4" 
+3

不需要貓。 '讀LINE時;做; ./foo.sh「$ COUNT」$ LINE; done

+0

outer命令實際上是用來追加到一個文件,所以它看起來更接近這個: cat file.txt |同時讀取LINE;做 echo -e'./foo.sh「$ COUNT」「$ LINE」'>> tmp done 這可能沒有必要,我仍然在學習所有這些 – TheTargetmobile