【发布时间】:2021-12-18 13:31:51
【问题描述】:
我正在尝试编写一个用于创建 AWS SQS 队列的 bash 脚本,然后检查该队列是否为空。为此,我创建了以下应该返回“null”的脚本:
aws sqs create-queue --queue-name MessagesQueue
queue_url=$(aws sqs list-queues --query QueueUrls[0])
queue_check=$(aws sqs get_queue_attributes --queue_url $queue_url --attribute-names ApproximateNumberOfMessages --query Attributes[0].ApproximateNumberOfMessages
我反而收到了这个错误信息:
An error occurred (InvalidAddress) when calling the GetQueueAttributes operation: The address "https://eu-west-3.queue.amazonaws.com/XXXXXXXXXXXX/MessagesQueue" is not valid for this endpoint.
但是,如果我在命令中明确写入相同的地址而不是使用 $queue_url,它可以正常工作并返回“null”。
为什么它不接受 $queue_url 但如果我明确写它则接受相同的 URL 地址?
编辑:似乎 aws-cli 命令将变量 $queue_url 读取为单引号和双引号之间的 URL,当我明确编写它时,它读取的 URL 不带引号,所以这就是它接受它的原因。如何使用我创建的 bash 变量,以便 aws-cli 读取它而不使用引号?
【问题讨论】:
-
在开头添加
set -x命令,这样bash会在运行的时候打印一个执行轨迹,看看和运行时有什么不同。我不知道这是否是问题所在,但我建议在$queue_url周围加上双引号以避免奇怪的解析问题(变量引用几乎应该总是双引号)。 -
@GordonDavisson 我尝试添加
set -x,显然唯一的区别是当我使用$queue_url(或"$queue_url")时,它会显示单引号和双引号之间的URL,如果我写它明确显示它根本没有引号,所以这可能是问题所在,我如何使用该变量以便 aws-cli 将其解释为没有引号的 url?
标签: bash aws-cli amazon-sqs