【问题标题】:Check shell variable failing when it returns null list返回空列表时检查shell变量失败
【发布时间】:2022-07-29 16:19:16
【问题描述】:

目标:尝试使用 bash 脚本检查 azure 上是否存在资源

我使用的代码:

status=$(az group list --query "[?name.contains(@,'test')]")
if [[ "$status" == null ]];
then
   echo "not exist"
else
   echo "exist"
fi

我在天蓝色中有这个资源,即它应该返回为“存在”,但它说不存在 如果我更改为不存在的资源组名称,那么时间也不存在。

您在这里看到任何语法问题吗?

如果我在命令行执行检查而不是脚本,下面是结果

user@ablab:~$ status=$(az group list --query "[?name.contains(@,'abcd')]")
user@ablab:~$ echo $status
[]
user@ablab:~$ status=$(az group list --query "[?name.contains(@,'test')]")
user@ablab:~$ echo $status
[ { "id": "/subscriptions/xxxx-xxxx-xxx--xxxxx3/resourceGroups/test1", "location": "westeurope", "managedBy": null, "name": "test1", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" } ]

现在我想使用 if 条件,如果它存在,它应该处理一组流程,否则处理一组代码..

请让我知道我的 if 语句有什么问题。

【问题讨论】:

    标签: bash azure shell unix


    【解决方案1】:

    语法很好。但是,我从您的示例中看不到 az 会将字符串 null 写入标准输出。在第一种情况下,它会根据您发布的内容打印字符串[]。要捕获这种情况,您必须进行测试

    if [[ $status == '[]' ]]
    then
      ...
    

    字符串周围的引号告诉 bash 不要将其解释为 glob 模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-29
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      相关资源
      最近更新 更多