2016-09-24 187 views
1

長選項風格看起來像這樣命令行選項

--key=value 

這個語法可以很容易地爲陣列狀值

--key=value\ 1,value\ 2,value\ 3 

擴大有如果每一種標準方法項目需要子選項?也就是說,當每個值都是複合類型時?

一個替代方案是

--key=[object\ 1],[object\ 2],... 

其中一個object具有被指定爲特殊make_value功能的語法。然後,查詢key將給出一組object s。用於指定object屬性的語法可能看起來像JSON或其他。

另一種選擇是完全放棄傳統語法,強制用戶將整個命令行鍵入爲JSON對象。

+0

不,我知道的。據我所知,您唯一的兩個選擇是逐個傳遞值,或者使用字符串值和數據編碼的數據。一個json。 –

回答

0

首先,在GNU系統的標準是不是這樣的:

--key=value\ 1,value\ 2,value\ 3 // WRONG 

但這:

--key=value\ 1 --key=value\ 2 --key=value\ 3 

其中在Bash可以這樣寫:

--key=value\ {1,2,3} 

現在,如果您的值本身是鍵值對,則單個值的典型用法如下所示:

--key=value\ 1=42 

或者多個在擊:

--key=value\ {1=42,2=300,3=0} 
+0

**第一:**我的解析器實際上也接受標準形式。 **第二個(更重要的):**如果'key'是一個複合詞,那麼數組中只能有一個元素,否則會有歧義。 '--key = value \ 1 = 42 --key = value \ 2 = 300'可以解釋爲在同一個對象中設置屬性「值1」和「值2」,或者它可以被解釋爲設置'第一個對象的值爲1,第二個對象的值爲2。 – user877329

+1

@ user877329:在這一點上我不清楚你在駕駛什麼。您應該在您的問題中提供一個完整的,一個或兩個候選語法的完整示例,並解釋它們究竟意味着什麼。 –