Bicep 中的資料類型
本文說明 Bicep 支援的資料類型。 若要定義自訂資料類型,請參閱使用者定義的資料類型。
支援的類型
在 Bicep 中,您可使用下列資料類型:
陣列
陣列開頭為左括弧 ([
),結尾為右括弧 (]
)。 在 Bicep 中,陣列可在單行或多行中宣告。 逗號 (,
) 可用於單行宣告中的值之間,但不能用於多行宣告中,您可以混合並比對單行和多行宣告。 多行宣告需要 Bicep CLI 0.7.X 版或更新版本。
var multiLineArray = [
'abc'
'def'
'ghi'
]
var singleLineArray = ['abc', 'def', 'ghi']
var mixedArray = ['abc', 'def'
'ghi']
陣列中的各項目代表任一類型。 您的陣列各項目可皆為相同的資料類型,也可為不同的資料類型。
下列範例顯示整數陣列及不同類型的陣列。
var integerArray = [
1
2
3
]
var mixedArray = [
resourceGroup().name
1
true
'example string'
]
Bicep 中的陣列以零為起始。 在下列範例中,運算式 exampleArray[0]
評估為 1,且 exampleArray[2]
評估為 3。 索引子的索引本身可能是另一個運算式。 運算式 exampleArray[index]
評估為 2。 僅限陣列類型的運算式使用整數索引子。
var index = 1
var exampleArray = [
1
2
3
]
當索引超出界限時,您會收到下列錯誤:
The language expression property array index 'x' is out of bounds
若要避免此例外狀況,您可以如下列範例所示,使用 Or 邏輯運算子:
param emptyArray array = []
param numberArray array = [1, 2, 3]
output foo bool = empty(emptyArray) || emptyArray[0] == 'bar'
output bar bool = length(numberArray) >= 3 || numberArray[3] == 4
布林值
指定布林值時,請使用 true
或 false
。 請勿用引號括住值。
param exampleBool bool = true
整數
指定整數值時,請勿使用引號。
param exampleInt int = 1
在 Bicep 中,整數為 64 位元的整數。 以內嵌參數形式傳遞時,值的範圍可能受限於部署所用的 SDK 或命令列工具。 例如,使用 PowerShell 來部署 Bicep 時,整數類型的範圍可介於 -2147483648 和2147483647。 若要避免這項限制,請在參數檔案中指定較大的整數值。 資源類型自身具有整數屬性的限制。
目前不支援浮點數、十進位或二進位格式。
物件
物件開頭為左大括弧 ({
),結尾為右大括弧 (}
)。 在 Bicep 中,物件可以在單行或多行中宣告。 物件中的每個屬性都是由索引鍵和值所組成。 索引鍵和值以冒號 (:
) 分隔。 物件允許任何類型的任何屬性。 單行宣告的屬性之間會使用逗號 (,
),但在多行宣告的屬性之間不會使用。 您可以混合並比對單行和多行宣告。 多行宣告需要 Bicep CLI 0.7.X 版或更新版本。
param singleLineObject object = {name: 'test name', id: '123-abc', isCurrent: true, tier: 1}
param multiLineObject object = {
name: 'test name'
id: '123-abc'
isCurrent: true
tier: 1
}
param mixedObject object = {name: 'test name', id: '123-abc', isCurrent: true
tier: 1}
在 Bicep 中,物件屬性索引鍵可選擇性使用引號:
var test = {
'my - special. key': 'value'
}
在上述範例中,當物件屬性索引鍵包含特殊字元時,則使用引號。 例如:空格、'-' 或 '.'。 下列範例示範如何在物件屬性索引鍵中使用插補。
var stringVar = 'example value'
var objectVar = {
'${stringVar}': 'this value'
}
屬性存取子用於存取物件的屬性。 這類存取子由 .
運算子所組成。
var a = {
b: 'Dev'
c: 42
d: {
e: true
}
}
output result1 string = a.b // returns 'Dev'
output result2 int = a.c // returns 42
output result3 bool = a.d.e // returns true
屬性存取子可與任何物件一併使用,包括物件類型和物件常值的參數和變數。 若非物件類型的運算式使用屬性存取子,則為錯誤。
您也可使用 []
語法來存取屬性。 下列範例會傳回 Development
。
var environmentSettings = {
dev: {
name: 'Development'
}
prod: {
name: 'Production'
}
}
output accessorResult string = environmentSettings['dev'].name
在 JSON 中,物件是零或多個索引鍵/值組的未排序集合。 根據實作而定,排序可能會不同。 例如,Bicep items() 函式會依字母順序排序物件。 在其他位置,可以保留原始排序。 由於這種非確定性,因此請避免在編寫與部署參數和輸出互動的程式碼時,對物件索引鍵的排序進行任何假設。
存取不存在的物件屬性時,您會收到下列錯誤:
The language expression property 'foo' doesn't exist
若要避免例外狀況,您可以如下列範例所示,使用 And 邏輯運算子:
param objectToTest object = {
one: 1
two: 2
three: 3
}
output bar bool = contains(objectToTest, 'four') && objectToTest.four == 4
字串
在 Bicep 中,字串以單引號標示,且須以單一行來宣告。 允許使用字碼指標介於 0 和 10FFFF 間的所有 Unicode 字元。
param exampleString string = 'test value'
下表列出必須以反斜線 (\
) 字元逸出的一系列保留字元:
逸出序列 | 表示值 | 備註 |
---|---|---|
\\ |
\ |
|
\' |
' |
|
\n |
換行字元 (LF) | |
\r |
歸位字元 (CR) | |
\t |
定位字元 | |
\u{x} |
Unicode 字碼指標 x |
x 代表介於 0 和 10FFFF (含此二值) 的十六進位字碼指標值。 允許以零開頭。 FFFF 以上的字碼指標會以代理字組的形式發出。 |
\$ |
$ |
僅限後面接著 { 時逸出。 |
// evaluates to "what's up?"
var myVar = 'what\'s up?'
Bicep 中的所有字串皆支援插補。 若要插入運算式,請在其前後使用 ${
和 }
。 參考的運算式不可跨越多行。
var storageName = 'storage${uniqueString(resourceGroup().id)}'
多行字串
在 Bicep 中,多行字串的定義位於三個單引號字元 ('''
) 之間,接著可選擇性使用新行 (開頭序列),以及三個單引號字元 ('''
-結尾序列)。 在開頭和結尾序列間輸入的字元會逐字讀取,並且無須也無法逸出。
注意
由於 Bicep 剖析器會如實讀取所有字元,因此根據 Bicep 檔案的行尾結束符號,新行可解讀為 \r\n
或 \n
。
多行字串目前不支援插補。 由於這項限制,您可能需要使用 concat
函式,而不是使用內插補點。
不支援包含 '''
的多行字串。
// evaluates to "hello!"
var myVar = '''hello!'''
// evaluates to "hello!" because the first newline is skipped
var myVar2 = '''
hello!'''
// evaluates to "hello!\n" because the final newline is included
var myVar3 = '''
hello!
'''
// evaluates to " this\n is\n indented\n"
var myVar4 = '''
this
is
indented
'''
// evaluates to "comments // are included\n/* because everything is read as-is */\n"
var myVar5 = '''
comments // are included
/* because everything is read as-is */
'''
// evaluates to "interpolation\nis ${blocked}"
// note ${blocked} is part of the string, and is not evaluated as an expression
var myVar6 = '''interpolation
is ${blocked}'''
安全字串和物件
安全字串所用的格式與字串相同,安全物件所用的格式則與物件相同。 您可使用 Bicep 將 @secure()
裝飾項目新增至字串或物件。
將參數設為安全字串或安全物件時,參數的值不會儲存至部署歷程記錄,且不會記錄。 但若將該安全值設為不需要安全值的屬性,此值則不受保護。 例如,若將安全字串設為標記,該值便會儲存為純文字。 密碼及秘密請使用安全字串。
下列範例示範兩個安全參數:
@secure()
param password string
@secure()
param configValues object
資料類型的可指派性
在 Bicep 中,您可將某類型 (來源類型) 的值指派給其他類型 (目標類型)。 下表顯示可供指派或無法指派的來源類型 (水平陳列) 及目標類型 (垂直陳列)。 在資料表中,X
表示可指派;空格表示無法指派;?
則表示其類型相容。
類型 | any |
error |
string |
number |
int |
bool |
null |
object |
array |
具名資源 | 具名模組 | scope |
---|---|---|---|---|---|---|---|---|---|---|---|---|
any |
X | X | X | X | X | X | X | X | X | X | X | |
error |
||||||||||||
string |
X | X | ||||||||||
number |
X | X | X | |||||||||
int |
X | X | ||||||||||
bool |
X | X | ||||||||||
null |
X | X | ||||||||||
object |
X | X | ||||||||||
array |
X | X | ||||||||||
resource |
X | X | ||||||||||
module |
X | X | ||||||||||
scope |
? | |||||||||||
具名資源 | X | ? | ? | |||||||||
具名模組 | X | ? | ? |
下一步
若要深入了解 Bicep 的結構和語法,請參閱 Bicep 檔案結構。