2016-06-10 114 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