2012-11-26 52 views
1

當嘗試將腳本參數傳遞到外部程序時,我得到一些奇怪的行爲,使用ksh。正確地將包含空格的參數傳遞給外部程序

我的設置是這樣的: - 我有一個KSH腳本(稱爲「測試」),這可以歸結爲這樣的事:

... 
args="[email protected]" 
java my_main_class $args 
... 

- 如果我把這個腳本是這樣的:

> ./test "param1 param2" param3 

...然後外部應用程序看到以下參數:(參數1,參數2,參數3)

...,做同樣的調用,然後我的外部應用程序可以看到下面的參數(參數1參數2,參數3) - 這意味着,現在,參數正確看到。

問題:在外部程序調用之前,如何修改腳本的第一個版本,以便正確傳遞包含空格的參數,同時仍將「@ $」存儲到變量中?

親切的問候, 安德烈

回答

1

首先,讓我們來設置相同的會話:

$ set -- "param1 param2" param3 
$ echo $1, $2 

param1 param2, param3

的ksh和bash提供一個數組賦值一個有效的解決方案:

$ args=("[email protected]") 
$ fake_java() { (for w; do echo "$w"; done); } 

這仍然會失敗婷:

$ fake_java ${args[@]} 

param1

param2

param3

但報價和陣列相結合,使這項工作:

$ fake_java my_main_class "${args[@]}" 

param1 param2

param3

+0

一箇舊的語法將'設置-A ARGS = 「$ @」' –

+0

感謝的人,這看起來像正確的事情。會給它一個旋轉,並回到你身邊。 – Andrei

相關問題