2013-10-20 33 views
1

我的程序需要三個選項./program a b c INPUT > OUTPUTa,b,c是選項)。
我有選擇的組合的清單:Bash:作爲程序選項的變量字符串

cat list_of_combinations 
1 2 3 
4 8 3 
1 5 7 
9 5 6  

我想用這四個不同的組合來執行program。例如:

./program 1 2 3 INPUT >> OUTPUT 
./program 4 8 3 INPUT >> OUTPUT 
./program 1 5 7 INPUT >> OUTPUT 

我已經嘗試過這樣的:

while read COMBO; do 
    echo $COMBO | 
    ./program - INPUT >> OUTPUT 
done < list_of_combinations 

而且這樣的:

while read COMBO; do 
    ./program $COMBO INPUT >> OUTPUT 
done < list_of_combinations 

我的問題是:
如何執行程序/命令同時使用一種條形碼g的變量作爲選項?

編輯

我不會有任何問題,如果只有一個字符作爲變量。我的意思是說:
程序只需要一個選項:

./program a INPUT > OUTPUT 
cat VARIABLES 
    1 
    15 
    78 
while read VARIABLE; do 
    ./program $VARIABLE INPUT > OUTPUT 
done < VARIABLES 

但是,當有幾個選項(字符串),例如./program a b INPUT > OUTPUT我得到的錯誤。

+0

你是如何得到'list_of_combinations'? – anubhava

+0

@anubhava我編輯了我的問題。 – PoGibas

+0

只要參數本身不能包含空格,使用'./program $ COMBO INPUT >> OUTPUT'的第二個循環就應該工作。 – chepner

回答

2

在你的參數變量中使用引號:

while read COMBO; do 
    ./program "$COMBO" INPUT >> OUTPUT 
done < list_of_combinations 

不包括引號$COMBO將被認爲是3個不同的輸入,而不是一個單一的字符串作爲與報價。

+1

當@Pgibas說它應該像'./program 1 2 3 INPUT >> OUTPUT'一樣工作時,我認爲他的意思是這些命令實際上是按字面輸入的。 :\ –

1

通過將選擇在命令行上:

./program $COMBO INPUT >> OUTPUT

所以,你的第二個例子應該工作。它有什麼問題?

+0

我已經試過(檢查我的問題)。這將工作,只有一個字符作爲變量。 – PoGibas

+0

正如我上面所說,出了什麼問題?你是什​​麼意思「這會工作,只有一個字符作爲變量」? –