Bash:在单个文件中分别处理json中的多个值

Bash:在单个文件中分别处理json中的多个值,bash,shell,Bash,Shell,我正在通过路径获取SSM值,并将名称和值成对添加到文件中。 json文件包含直接表示名称和值的路径。我正在剥离路径以仅获取名称,但这两个命令都是单独的命令,我需要以格式添加它们 name=value json示例: aws ssm get-parameters-by-path --region eu-central-1 --path /dev/stagefirst/ --with-decryption { "Parameters": [ {

我正在通过路径获取SSM值,并将名称和值成对添加到文件中。 json文件包含直接表示名称和值的路径。我正在剥离路径以仅获取名称,但这两个命令都是单独的命令,我需要以格式添加它们

name=value
json示例:

   aws ssm   get-parameters-by-path --region eu-central-1 --path /dev/stagefirst/ --with-decryption
{
    "Parameters": [
        {
            "Name": "/dev/stagefirst/param-password",
            "Type": "SecureString",
            "Value": "password",
            "Version": 1,
            "LastModifiedDate": 1601372197.273,
        },
        {
            "Name": "/dev/stagefirst/param-username",
            "Type": "SecureString",
            "Value": "username",
            "Version": 1,
            "LastModifiedDate": 1601372195.764,
        }
    ]
}
我正在以这种方式处理名称和值

aws ssm   get-parameters-by-path --region eu-central-1 --path /dev/stagefirst/ --with-decryption | jq -r ".Parameters[].Name" | sed 's:.*/::'
aws ssm   get-parameters-by-path --region eu-central-1 --path /dev/stagefirst/ --with-decryption | jq -r ".Parameters[].Value"
结束文件将如下所示

param-username=username
param-password=password
我怎样才能把它们结合起来?有什么想法吗?谢谢。

试试这个jq

jq-r'.Parameters[]|.Name++.Value'| sed's:.*/:'

试试这个jq

jq-r'.参数[]|.Name++.Value'| sed's:.*/:'

仅在单个调用中使用jq:

aws ssm通过路径获取参数\ -区域eu-central-1\ -路径/dev/stagefirst/\ -解密| jq-r'.参数[]|.Name |捕获。*/?*.a++.Value' 使用独立jq脚本处理aws ssm的输出通过路径获取参数

创建名为ssmparameters2sh的jq脚本文件,如下所示:

#!/usr/bin/env -S jq -rf

.Parameters[] | (
  (
    .Name |
      capture(".*/param-(?<name>.*)")
      .name
  ) + "=" + (
    .Value | @sh
  )
)
现在在脚本中这样使用它,以便访问直接转换为shell中变量的参数:

!/usr/bin/env bash source仅在一次通话中使用jq:

aws ssm通过路径获取参数\ -区域eu-central-1\ -路径/dev/stagefirst/\ -解密| jq-r'.参数[]|.Name |捕获。*/?*.a++.Value' 使用独立jq脚本处理aws ssm的输出通过路径获取参数

创建名为ssmparameters2sh的jq脚本文件,如下所示:

#!/usr/bin/env -S jq -rf

.Parameters[] | (
  (
    .Name |
      capture(".*/param-(?<name>.*)")
      .name
  ) + "=" + (
    .Value | @sh
  )
)
现在在脚本中这样使用它,以便访问直接转换为shell中变量的参数:

!/usr/bin/env bash
来源:非常感谢您的详细解释。是否有一种方法可以获取值并将其导出,因此它在脚本中可用,因此,假设命令输出为username=XYZ。我想调用导出用户名=XYZ。。。所以我可以在脚本中使用$username。非常感谢-@WeareBorg变量已经提供给Bash脚本,因此不需要导出no,我的意思是应该导出作为键的名称和来自SSM的值。这些值在脚本中可用吗?因此,在/dev/stage/first/下拉入的所有参数都是导出的键值对……其中key是/dev/stage/之后的名称,value是检索到的:-@Weareberg不确定您想要出口什么。导出在shell中具有特定含义。这意味着在此之后生成的所有进程都可以使用环境变量。我写给您的脚本片段不需要导出,因为一旦它运行,第一个版本的用户名和密码变量或关联数组参数在当前bashshell脚本中已经可用。还要注意的是,将这些导出到其他程序作为环境,只能导出普通字符串变量username和password,关联数组cannotI已经编写了一个pastebin来解释我的意思:请看一看。非常感谢-非常感谢您的详细解释。是否有一种方法可以获取值并将其导出,因此它在脚本中可用,因此,假设命令输出为username=XYZ。我想调用导出用户名=XYZ。。。所以我可以在脚本中使用$username。非常感谢-@WeareBorg变量已经提供给Bash脚本,因此不需要导出no,我的意思是应该导出作为键的名称和来自SSM的值。这些值在脚本中可用吗?因此,在/dev/stage/first/下拉入的所有参数都是导出的键值对……其中key是/dev/stage/之后的名称,value是检索到的:-@Weareberg不确定您想要出口什么。导出在shell中具有特定含义。这意味着在此之后生成的所有进程都可以使用环境变量。我写给您的脚本片段不需要导出,因为一旦它运行,第一个版本的用户名和密码变量或关联数组参数在当前bashshell脚本中已经可用。还要注意的是,将这些导出到其他程序作为环境,只能导出普通字符串变量username和password,关联数组cannotI已经编写了一个pastebin来解释我的意思:请看一看。非常感谢-