英文:
How to extract two attribute values from a json output and assign each of them to a dedicated variable in bash?
问题
请注意:
~$ az ad sp show --id $spn_id --query '[appId, displayName]'
[
"c...1",
"xyz"
]
~$
我想将每个返回的值分配给它们各自的Bash变量,即APP_ID
和APP_DISPLAY_NAME
。我的当前解决方案如下:
~$ read -r APP_ID APP_DISPLAY_NAME < <(az ad sp show --id $spn_id --query '[appId, displayName]' -o tsv)
~$
这也能正常工作:
~$ echo $APP_ID
c...1
~$ echo $APP_DISPLAY_NAME
xyz
~$
英文:
Please, observe:
~$ az ad sp show --id $spn_id --query '[appId, displayName]'
[
"c...1",
"xyz"
]
~$
I would like to assign each returned value to its own bash variable, namely to APP_ID
and APP_DISPLAY_NAME
respectively. My current solution is this:
~$ x=(`az ad sp show --id $spn_id --query '[appId, displayName]' -o tsv | tr -d '\r'`)
~$ APP_ID=${x[0]}
~$ APP_DISPLAY_NAME=${x[1]}
~$
Which works fine:
~$ echo $APP_ID
c...1
~$ echo $APP_DISPLAY_NAME
xyz
~$
I am curious if it is possible to do it in a more concise way?
答案1
得分: 1
是的,使用jq是最清晰的方法:
str='[
"c...1",
"xyz"
]'
# 通过使用'.[N]'语法获取数组中的第N个项目
app_id=$(jq -r '.[0]' <<< "$str")
# 'jq'需要通过标准输入传递输入字符串。使用'<<<'来实现
app_display_name=$(jq -r '.[1]' <<< "$str")
printf '%s\n' "id: $app_id"
printf '%s\n' "name: $app_display_name"
英文:
Yes, using jq would be the cleanest way:
str='[
"c...1",
"xyz"
]'
# The '.[N]' syntax gets the Nth item in the array
app_id=$(jq -r '.[0]' <<< "$str")
# 'jq' requires feeding the input string through standard input. use the '<<<' to do so
app_display_name=$(jq -r '.[1]' <<< "$str")
printf '%s\n' "id: $app_id"
printf '%s\n' "name: $app_display_name"
答案2
得分: 1
您可以使用以下命令与 sed
和 xargs
结合使用:
export $(az ad sp show --id $spn_id --query '[appId, displayName]' | tr -d "\n" | sed -E "s/\[\s+(.+)\,\s+(.+)\]/APP_ID=\"\" \nAPP_DISPLAY_NAME=\"\"/" | xargs -L 1)
然后,您可以使用以下命令来输出 APP_ID
和 APP_DISPLAY_NAME
的值:
echo $APP_ID
echo $APP_DISPLAY_NAME
输出会是:
c...1
xyz
英文:
You can use the following with sed
and xargs
:
export $( az ad sp show --id $spn_id --query '[appId, displayName]' | tr -d "\n" | sed -E "s/\[\s+(.+)\,\s+(.+)\]/APP_ID=\"\" \nAPP_DISPLAY_NAME=\"\"/" | xargs -L 1)
~$ echo $APP_ID
c...1
~$ echo $APP_DISPLAY_NAME
xyz
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论