簡體   English   中英

如何將參數傳遞給命令行Java程序並轉義所有特殊字符?

[英]How can I pass in arguments to a command line Java program and escape all special characters?

我有一個命令行Java程序,並且正在通過bash腳本傳遞參數。 該行位於我的bash腳本文件中,如下所示:

java -cp "$PROJECT_LOC" Main.main "@$"

bash腳本在我的路徑中,因此我可以通過鍵入以下內容直接調用該程序

<projectName> arg1 arg2 arg3

直接進入我的終端(我在OS X Yosemite上)。

當將“&”號作為參數傳遞時,它不會被視為普通的“&”號,而是被視為執行某些過程的特殊字符“&”號。 但是,我希望能夠簡單地將&符號作為參數傳遞,而不必使程序的用戶手動轉義字符。

有沒有一種方法可以處理我的bash腳本中的&符(或任何其他特殊字符)的傳入,這樣輸入中的任何和所有特殊字符都將被轉義,然后作為的(現在已清除)args傳入Java程序?

編輯:更清楚地說,我希望能夠在終端中執行以下操作:

<projectName> arg1 arg&2 arg3

我希望此輸入與此等效:

<projectName> 'arg1' arg&2' 'arg3'

但是我正在尋找一種不必強迫用戶自己逃脫特殊字符(在幕后進行所有操作)的方法。

您可以在每個參數周圍加上單引號(')。 我不確定這是否算作“轉義”參數。

您需要在命令行上引用/轉引號。 當您輸入如下命令時:

<projectName> arg1 arg&2 arg3

Shell將其解析為兩個單獨的命令<projectName> arg1 arg2 arg3 ,並確定第一個命令應在后台運行。 您的腳本看不到2 arg3 (這是一個單獨的命令),甚至看不到& (這是該命令后的分隔符)。 所有這些都在腳本運行之前,甚至在外殼開始弄清楚<projectName>與您的腳本相對應之前<projectName>確定。

您的腳本對此完全零控制

換句話說,將根據標准Shell語法來解析命令行,並且標准Shell語法表示未轉義/未引用的&符是命令之間的分隔符。 您的腳本不能使自己成為該語法的例外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM