2016-03-02 39 views
1

在PIG一個串內,如何用相似的殼代碼通過這在殼將參數傳遞給豬使用殼膨脹

{20160218,20160219,20160220,20160221,20160222,20160223,20160224} 

? 以上不起作用,因爲單引號省略擴展。

沒有單引號,似乎只有20160218正在通過。 的PIG腳本如下:

list = load '/inserteddate={$input}' 
    USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') as cartjson:map[]; 
+0

順便說一句,你應該添加你的特定外殼作爲標籤 - 我假設你正在使用[標籤:bash]。 [tag:shell]標記通常用於解決符合POSIX標準的功能的問題,而您使用的括號擴展功能需要'bash','ksh'或'zsh'。 – mklement0

+0

謝謝,但加載評論仍然無法正常工作。我添加了bash標籤。 – Tadelicious

回答

2

嘗試雙引號命令替換($(...)):

pig -f cart_abandonment.pig -param input="$(echo {20160218..20160224} | tr ' ' ',')" 
  • 正如你已經發現,一個brace expansion只能使用時加引號

  • 然而,爲了通過由它產生的選項參數input=一部分的所有數字,編號列表必須是雙引號

  • 這是通過使用實現command substitution$(...))來生成號碼列表(和回聲它到stdout,其命令替換捕獲),這是雙引號,使得其輸出作爲處理一個單個的字由shell,所以input=num1 num2 ...形成一個單個選項參數。

  • pig期望在這種情況下,逗號分隔值,而括號擴展傳遞給echo導致空格分隔值,因此需要與空間平移​​3210到逗號。