

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 變數語法
<a name="v10-dash-variable-syntax"></a>

****  
本文件主題專為支援 Grafana **10.x 版的 Grafana** 工作區而設計。  
如需支援 Grafana 12.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 12 版](using-grafana-v12.md)。  
如需支援 Grafana 9.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 9 版](using-grafana-v9.md)。  
如需支援 Grafana 8.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 8 版](using-grafana-v8.md)。

面板標題和指標查詢可以使用兩種不同的語法來參考變數。
+ `$varname` – 此語法易於閱讀，但不允許您在單字中間使用變數。

  **範例**：`apps.frontend.$server.requests.count`
+ `${var_name}` – 當您想要在表達式中間使用變數時，請使用此語法。
+ `${var_name:<format>}` – 此格式可讓您進一步控制 Grafana 如何解譯值。如需詳細資訊，請參閱此清單後面的*進階變數格式選項*。
+ `[[varname]]` – 請勿使用。此語法是舊的，已棄用。它將在未來的版本中移除。

將查詢傳送至資料來源之前，會*插入*查詢，這表示將變數取代為其目前值。在插補期間，可能會*逸出*變數值，以符合查詢語言及其使用位置的語法。例如，InfluxDB 或 Prometheus 查詢中 regex 表達式中使用的變數將逸出 regex。

**進階變數格式選項**

變數插補的格式取決於資料來源，但在某些情況下，您可能想要變更預設格式。

例如，MySQL 資料來源的預設值是以逗號分隔的引號聯結多個值：`'server01','server02'`。在某些情況下，您可能想要有一個逗號分隔的字串，不含引號：`server01,server02`。您可以使用下列進階變數格式選項來達成此目的。

**一般語法**

語法: `${var_name:option}`

如果指定了任何無效的格式化選項，則 `glob` 是預設/備用選項。

**CSV**

將具有多個值的變數格式化為逗號分隔字串。

```
servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:csv}'
Interpolation result:  'test1,test2'
```

**分散式 - OpenTSDB**

使用 OpenTSDB 自訂格式的多個值格式化變數。

```
servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:distributed}'
Interpolation result:  'test1,servers=test2'
```

**雙引號**

將單值和多值變數格式化為逗號分隔字串，以 逸出每個值`"`，`\"`並使用 引用每個值`"`。

```
servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:doublequote}'
Interpolation result:  '"test1","test2"'
```

**Glob - 石灰色**

將具有多個值的變數格式化為 glob （適用於 Graphite 查詢）。

```
servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:glob}'
Interpolation result:  '{test1,test2}'
```

**JSON**

將具有多個值的變數格式化為逗號分隔字串。

```
servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:json}'
Interpolation result:  '["test1", "test2"]'
```

**Lucene - Elasticsearch**

使用 Elasticsearch 的 Lucene 格式的多個值格式化變數。

```
servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:lucene}'
Interpolation result:  '("test1" OR "test2")'
```

**百分比編碼**

格式化單一和多值變數，以用於 URL 參數。

```
servers = [ 'foo()bar BAZ',  'test2' ]
String to interpolate:  '${servers:percentencode}'
Interpolation result:  'foo%28%29bar%20BAZ%2Ctest2'
```

**管道**

將具有多個值的變數格式化為管道分隔字串。

```
servers = [ 'test1.',  'test2' ]
String to interpolate:  '${servers:pipe}'
Interpolation result:  'test1.|test2'
```

**原始**

關閉資料來源特定的格式，例如 SQL 查詢中的單引號。

```
servers = [ 'test.1',  'test2' ]
String to interpolate:  '${var_name:raw}'
Interpolation result:  'test.1,test2'
```

**Regex**

將具有多個值的變數格式化為 regex 字串。

```
servers = [ 'test1.',  'test2' ]
String to interpolate:  '${servers:regex}'
Interpolation result:  '(test1\.|test2)'
```

**單引號**

將單值和多值變數格式化為逗號分隔字串，以 逸出每個值`'`，`\'`並使用 引用每個值`'`。

```
servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:singlequote}'
Interpolation result:  "'test1','test2'"
```

**Sqlstring**

將單值和多值變數格式化為逗號分隔字串，以 逸出每個值`'`，`''`並使用 引用每個值`'`。

```
servers = [ "test'1",  "test2" ]
String to interpolate:  '${servers:sqlstring}'
Interpolation result:  "'test''1','test2'"
```

**Text (文字)**

將單值和多值變數格式化為文字表示法。對於單一變數，它只會傳回文字表示法。對於多值變數，它會傳回與 結合的文字表示法`+`。

```
servers = [ "test1",  "test2" ]
String to interpolate:  '${servers:text}'
Interpolation result:  "test1 + test2"
```

**查詢參數**

將單值和多值變數格式化為查詢參數表示法。範例：`var-foo=value1&var-foo=value2`

```
servers = [ "test1",  "test2" ]
String to interpolate:  '${servers:queryparam}'
Interpolation result:  "var-servers=test1&var-servers=test2"
```