在bash中提取类似json的变量的值

use*_*928 1 bash json jq

我在bash中有一个变量,它是Amazon EMR create命令的输出;

CLUSTER=$(aws emr create-cluster ...)
echo $CLUSTER
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

{ "ClusterId": "j-9YWMBYN98LN7" }
Run Code Online (Sandbox Code Playgroud)

我需要做的是将值提取j-9YWMBYN98LN7到一个新变量,如:

ID=$CLUSTER.(ClusterId)
Run Code Online (Sandbox Code Playgroud)

当然上面的命令不起作用.我试过jq但没有运气.

ID=$(jq -r '.ClusterId' $CLUSTER)
Run Code Online (Sandbox Code Playgroud)

问题是我甚至不确定$ CLUSTER是什么类型的.我如何在那里提取价值j-9YWMBYN98LN7?谢谢

CS *_*Pei 10

如果你想使用jq,你可以这样做

 ID=`echo ${CLUSTER} | jq -r '.ClusterId'`
Run Code Online (Sandbox Code Playgroud)


sjs*_*sam 5

如果

echo $CLUSTER
Run Code Online (Sandbox Code Playgroud)

给你

{ "ClusterId": "j-9YWMBYN98LN7" }
Run Code Online (Sandbox Code Playgroud)

然后

ID=$(awk  'BEGIN{FS="\""}{print $4}' <<< "${CLUSTER}")
Run Code Online (Sandbox Code Playgroud)

应该这样做。

echo "$ID"
j-9YWMBYN98LN7
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案适用于 bash,但不适用于其他 shell。这是我对 ash 的变体:`ID=$(echo $CLUSTER | awk 'BEGIN{FS="\""}{print $4}')` (2认同)