2016-06-10 68 views
0

我無法調試爲什麼它返回shell腳本返回null輸出

null
值。有人可以幫忙解決這個問題。

碼 -

 
getJSONParamater() { 
     echo "Before : $1 $2 $3" 
     eval "$3=$(cat $1 | jq '."$2"')" 
     echo "After : $1 $2 $3" 
} 

return_value='default' 
getJSONParamater etl-without-transformation.json success_email return_value 

echo $return_value 
+0

@Inian - 我只是想它和它的作品對我來說用雙引號 – Smeeheey

+0

@devsda推測其因爲'貓... | jq ...'命令返回null – Smeeheey

+1

要調試shell腳本,請在頂部放置'set -x'。然後它會在執行它時顯示每一行,這樣你就可以看到發生了什麼問題。 – Barmar

回答

4

jq '."$2"'將發送文字."$2"作爲一個JQ表達,你想要的是:

jq --arg key "$2" '.[$key]' "$1" 

還刪除了無用的使用cat

我不太明白你想要什麼與評估部分?但我想你試圖設置return_value來自jq的結果?

getJSONParameter() { 
    jq --arg key "$2" '.[$key]' "$1" 
} 

return_value="$(getJSONParameter "etl-without-transformation.json" "success_email")" 
1

的另一種方法,通過使用全局變量來做到這一點:

return_value='default' 
getJSONParamater() { 
     return_value=$(cat "$1" | jq "$2") 
} 
getJSONParamater etl-without-transformation.json .success_email 
echo $return_value