Bicep 散佈運算符

散布運算子是用來將可反覆運算的陣列或對象展開成個別元素。 散布運算子可讓您輕鬆地操作數位或物件,方法是將其元素或屬性分散到新的數位或物件。

Spread

...

散布運算子可用來將屬性從某個物件複製到另一個物件,或以簡潔且可讀的方式合併陣列和物件。

範例

下列範例顯示 物件中使用的散佈運算子:

var objA = { color: 'white' }
output objB object = { shape: 'circle', ...objA } 

範例的輸出:

名稱 類型 ReplTest1
objB object { shape: 'circle', color: 'white' }

下列範例顯示陣列中使用的散佈運算子:

var arrA = [ 2, 3 ]
output arrB array = [ 1, ...arrA, 4 ] 

範例的輸出:

名稱 類型
arrB 陣列 [ 1, 2, 3, 4 ]

下列範例顯示單一作業中多次使用的散佈:

var arrA = [ 2, 3 ]
output arrC array = [ 1, ...arrA, 4, ...arrA ] 

範例的輸出:

名稱 類型
arrC 陣列 [ 1, 2, 3, 4, 2, 3 ]

下列範例顯示多行作業中使用的散佈:

var objA = { color: 'white' }
var objB = { shape: 'circle'}
output objCombined object = { 
  ...objA 
  ...objB
} 

在此用法中,不會在兩行之間使用逗號。 範例的輸出:

名稱 類型 ReplTest1
objCombined object { color: 'white', shape: 'circle' }

散佈作業可用來避免設定選擇性屬性。 在下列範例中,只有在參數層不是空字串時,才會設定 accessTier

param location string = resourceGroup().location
param tier string = 'Hot'

var storageAccountName = uniqueString(resourceGroup().id)
var accessTier = tier != '' ? {accessTier: tier} : {}

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    ...accessTier
  } 
}

上述範例也可以撰寫為:

param location string = resourceGroup().location
param tier string = 'Hot'

var storageAccountName = uniqueString(resourceGroup().id)

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    ...(tier != '' ? {accesssTier: tier} : {})
  } 
}

散布運算子可用來覆寫現有的屬性。

param location string = resourceGroup().location
param storageProperties {
  accessTier: string?
}

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: uniqueString(resourceGroup().id)
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Cold'
    ...storageProperties
  }
}

下一步