2013-09-21 37 views
0

我有一個bash腳本,它執行一個Java命令並將空格分隔的字符串作爲參數傳遞。假設java類是「HelloWorld」,並且所需的參數是作爲 「-environment WIN XP」傳遞的。所以在我的腳本中的線路有:BASH文件名空間IsSUE

 env = WIN XP 
     arg=" -environment $env" 
     javaCmd="java -Xmx2000m foo.bar.HelloWorld $arg" 
     $javaCmd 

我的HelloWorld類只能得到部分參數-environment贏,因爲它期待-environment WIN XP作爲一個整體與空間拋出一個錯誤。我可以如何確保整個字符串被視爲一次而不會在空白處分割。

回答

2

分配變量時,=和名稱之間應該沒有空格。我建議您爲變量使用與env不同的名稱。變量arg在這裏也不是必須的。您可以直接將其納入javaCmd

env="WIN XP" 
javaCmd="java -Xmx2000m foo.bar.HelloWorld -environment $env" 
$javaCmd 
+0

感謝chcikegg。我已經提出了一個簡單的例子。真正的情況是,變量env是一個文件名,如測試示例$ {NUMBER} .xlsx,其中NUMBER作爲腳本參數傳遞。所以如果我通過2004年,env被設置爲測試樣本2004.xlsx,但問題仍然存在。我的Java代碼仍然獲得測試值,而不是測試sample 2004.xlsx。 –

+1

'-environment'仍然看到一個參數'WIN','XP'被當作'java'的單獨參數。你不能在'bash'中使用像這樣嵌套的嵌入字符串,而不使用數組。 – chepner

+0

謝謝Chepner。你能否演示陣列的用法來處理空間問題。 –