Shell 脚本错误 - 无法将一个变量的输出提供给另一变量

Shell 脚本错误 - 无法将一个变量的输出提供给另一变量

我在执行 shell 脚本时收到以下错误:(Bash)

An error occurred (InvalidID) when calling the CreateTags operation: The ID ‘{‘ is not valid”

因此,当我查看 shell 脚本时,有两行脚本导致了问题,我发现在我的情况下,第 1 行的输出用作第 2 行的输入(--resource $remote_snapshot_id):

1号线:

remote_snapshot_id=$(aws ec2 copy-snapshot --region us-east-1 --source-region $region --source-snapshot-id $snapshot_id --description $snapshot_id)

2号线:

aws ec2 create-tags --region us-east-1 --resource $remote_snapshot_id --tags Key=CreatedBy,Value=AutomatedBackup

当我尝试在 Linux 终端中将第 1 行作为单个命令执行时:

aws --region us-east-1 ec2 copy-snapshot --source-region us-west-1 --source-snapshot-id snap-00220030300040 --description "Automated_Backup_425"

输出:

{
    "SnapshotId": "snap-00880090900090"
}

但第 2 行仅需要第 1 行输出中的值 snap-00880090900090。 (因为它当前正在选择从“{开始的整个输出”,所以它给出了这样的错误,因为它只需要snap-00880090900090)

所以我的问题是我如何 grep snap-00880090900090 并存储该输出以供第 2 行使用(--resource $remote_snapshot_id)

有人可以帮忙解决这个问题吗?

答案1

我如何 grep snap-00880090900090 [来自{ "SnapshotId": "snap-00880090900090" }]?

由于您打算从中提取的格式是 JSON,因此最好使用支持 JSON 的工具来完成此操作。jq如果您可以安装它,我建议您:

command | jq -r .SnapshotId

如果command输出您提到的 JSON 片段,那么该jq 命令将仅输出snap-00880090900090(不带引号,或“原始”,这要归功于 option -r)。

如果您无法安装正确的 JSON 感知工具,可以接受更脆弱的解决方案,并且知道快照 ID 将始终具有示例中所示的形式(“snap-”后跟一系列数字),那么您可以使用 GNU grep 像这样提取它:

command | grep -o 'snap-[0-9]\+'

相关内容