[英]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 arg
和2 arg3
,並確定第一個命令應在后台運行。 您的腳本看不到2 arg3
(這是一個單獨的命令),甚至看不到&
(這是該命令后的分隔符)。 所有這些都在腳本運行之前,甚至在外殼開始弄清楚<projectName>
與您的腳本相對應之前<projectName>
確定。
您的腳本對此完全零控制 。
換句話說,將根據標准Shell語法來解析命令行,並且標准Shell語法表示未轉義/未引用的&符是命令之間的分隔符。 您的腳本不能使自己成為該語法的例外。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.