Share via


Bicep 存取子運算子

存取子運算子可用來存取子資源、物件的屬性,以及陣列中的元素。 您也可以使用屬性存取子來使用某些函數。

運算子 名稱
[] 索引存取子
. 函式存取子
:: 巢狀資源存取子
. 屬性存取子

索引存取子

array[integerIndex]

object['stringIndex']

您可以使用索引存取子,從陣列取得元素或從物件取得屬性。

若為陣列,以整數形式提供索引。 整數需與待擷取元素以零起始的位置一致。

若為物件,以字串形式提供索引。 字串需與待擷取物件的名稱一致。

下列範例會取得陣列中的元素。

var arrayVar = [
  'Coho'
  'Contoso'
  'Fabrikan'
]

output accessorResult string = arrayVar[1]

範例的輸出:

名稱 類型
accessorResult string 'Contoso'

下一個範例會取得物件的屬性。

var environmentSettings = {
  dev: {
    name: 'Development'
  }
  prod: {
    name: 'Production'
  }
}

output accessorResult string = environmentSettings['dev'].name

範例的輸出:

名稱 類型
accessorResult string 'Development'

函數存取子

resourceName.functionName()

getSecretlist* 這兩個函數支援用於呼叫函數的存取子運算子。 這兩個函數是唯一支援存取子運算子的函數。

範例

下列範例會參考現有的金鑰保存庫,然後使用 getSecret 將祕密傳遞給模組。

resource kv 'Microsoft.KeyVault/vaults@2023-02-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup )
}

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    sqlServerName: sqlServerName
    adminLogin: adminLogin
    adminPassword: kv.getSecret('vmAdminPassword')
  }
}

巢狀資源存取子

parentResource::nestedResource

巢狀資源是在另一個資源內宣告的資源。 使用巢狀資源存取子 ::,從父資源外部存取該巢狀資源。

在父資源內,您只要參考具有符號名稱的巢狀資源即可。 從父資源外部參考巢狀資源時,您只需使用巢狀資源存取子。

範例

下列範例示範如何分別從父資源內部和外部參考巢狀資源。

resource demoParent 'demo.Rp/parentType@2023-01-01' = {
  name: 'demoParent'
  location: 'West US'

  // Declare a nested resource within 'demoParent'
  resource demoNested 'childType' = {
    name: 'demoNested'
    properties: {
      displayName: 'The nested instance.'
    }
  }

  // Declare another nested resource
  resource demoSibling 'childType' = {
    name: 'demoSibling'
    properties: {
      // Use symbolic name to reference because this line is within demoParent
      displayName: 'Sibling of ${demoNested.properties.displayName}'
    }
  }
}

// Use nested accessor to reference because this line is outside of demoParent
output displayName string = demoParent::demoNested.properties.displayName

屬性存取子

objectName.propertyName

使用屬性存取子來存取物件的屬性。 屬性存取子可以與任何物件一起使用,包括身為物件的參數和變數。 在非物件的運算式上使用屬性存取時,就會收到錯誤。

範例

下列範例顯示物件變數和如何存取屬性。

var x = {
  y: {
    z: 'Hello'
    a: true
  }
  q: 42
}

output outputZ string = x.y.z
output outputQ int = x.q

範例的輸出:

名稱 類型
outputZ string 'Hello'
outputQ 整數 42

通常會將屬性存取子與 Bicep 檔案中部署的資源搭配使用。 下列範例會建立公用 IP 位址,並使用屬性存取子從已部署的資源傳回值。

resource publicIp 'Microsoft.Network/publicIPAddresses@2022-11-01' = {
  name: publicIpResourceName
  location: location
  properties: {
    publicIPAllocationMethod: dynamicAllocation ? 'Dynamic' : 'Static'
    dnsSettings: {
      domainNameLabel: publicIpDnsLabel
    }
  }
}

// Use property accessor to get value
output ipFqdn string = publicIp.properties.dnsSettings.fqdn

下一步