2012-12-03 38 views
0

我在不同的環境中運行我的腳本,因此我將要啓動的程序的路徑和名稱存儲在變量$CreateSequenceDictionary中。引號中的差異變量(在命令中)

這個程序使用參數R=O=因爲這個原因我把整個命令放在引號「」中。沒有這些,程序開始時沒有任何參數。

現在我的問題:而不是$reference我想傳遞這個變量的內容。我試過這個:

"java -jar $CreateSequenceDictionary R=$reference O=output" >mlogfile 

和許多變化(如``「」eval \)沒有成功。

請問,我應該如何調整我的命令,以便我可以運行程序存儲在變量中,參數存儲在變量中?

編輯:如果我應該使用終端命令,它應該是這樣的:

java -jar /path/CreateSequenceDictionary.jar R=input O=output 

不過,我想從變量節目的名稱也從命名變量輸入文件。

+0

那麼這是如何工作的?你有一個名爲'$ reference'的變量,你想用'R'來替換同一個變量嗎?重點是什麼? – Raffaele

+0

不,通常命令如下所示:java -jar /path/CreateSequenceDictionary.jar R =輸入O =輸出,我想從變量中獲取程序名稱,也從變量中獲取輸入文件的名稱(該輸入文件是參數程序CreateSequenceDictionary.jar需要) – Perlnika

回答

2

你可以做到這一點,沒有周圍的引號。

java -jar $CreateSequenceDictionary R=$reference O=output > mlogfile 

Bash會在運行命令之前擴展變量。

如果要有條件地包括R=O=選項,你可以嘗試這樣的事:

CreateSequenceDictionary="your_Program" 
r_option ="$reference" 
o_option="output" 

arguments=() 
[[ "$r_option" ]] && arguments+=("$r_option") 
[[ "$o_option" ]] && arguments+=("$o_option") 

java -jar $CreateSequenceDictionary "${arguments[@]}" > mlogfile 

此基礎上即時的其他參數,並跳過那些相關*_option變量是空的。

+0

用空格保護選項值,使用一個數組:'arguments =(); [[「$ r_option」]] && arguments + =(「$ r_option」); ...; java ...「$ {arguments [@]}」...' - 注意通常建議避免使用大寫變量名,以免意外覆蓋系統或環境變量。 –

+0

偉大的建議!更新。非常感謝格倫。 –

+0

我會嘗試你添加參數的方式。但是,如果沒有周圍的引號,程序將在沒有任何參數的情況下啓動。我很確定這是因爲它屈服於「錯誤:選項」OUTPUT「是必需的。」 – Perlnika