How to use shorthand syntax with Azure CLI

Many Azure CLI parameters accept JSON values, but because it can be challenging to flatten JSON into a string, the Azure CLI supports shorthand syntax. Shorthand syntax is a simplified representation of a JSON string.

This article provides examples of shorthand syntax, and shows how to pass JSON as a file.

Note

You'll know that a parameter accepts shorthand syntax when the parameter description reads similar to Support shorthand-syntax, JSON-file and YAML-file. Try "??" to show more.

Full value shorthand syntax

Shorthand syntax in Full Value format is JSON surrounded by double quotes. Double quotes cause the JSON value to be passed as a string in both the PowerShell and Bash scripting language. Here's a JSON example:

{
  "name": "Bill",
  "age": 20,
  "paid": true,
  "emails": [
    "Bill@microsoft.com",
    "Bill@outlook.com"
  ],
  "address": {
    "country": "USA",
    "company": "Microsoft",
    "details": {
      "line1": "15590 NE 31st St",
      "line2": "Redmond, WA"
    }
  }
}

When you pass JSON in a parameter value, the JSON is flattened and wrapped in double quotes.

az some-command --contact "{name:Bill,age:20,paid:true,emails:[Bill@microsoft.com,Bill@outlook.com],address:{country:USA,company:Microsoft,details:{line1:'15590 NE 31st St',line2:'Redmond, WA'}}}"

Partial value shorthand syntax

Shorthand syntax for partial value is composed of two parts joined by an equal (=) sign between the index key and the value. Here's an example: key=value.

The value can be a simplified string, full value format, JSON, or a JSON file path. Using the JSON example provided, pass properties for the --contact parameter following these examples:

Use Partial Value for a single key-value pair.

az some-command --contact name=Bill

Use Partial Value for two key-value pairs. Note the space that separates the two pairs.

az some-command --contact age=20 paid=true

Use Partial Value for second element.

az some-command --contact emails[1]="Bill@outlook.com"

Use Partial Value for details property of address.

az some-command --contact address.details="{line1:'15590 NE 31st St',line2:'Redmond, WA'}"

Combine full and partial value shorthand syntax

You can combine full and partial value syntax, but always start with Full Value followed by Partial Value. If you reverse the order, the final data only contains the Full Value without properties defined in Partial Value.

Use Full Value followed by Partial Value:

az some-command --contact "{name:Bill,age:20,paid:true,emails:[Bill@microsoft.com,Bill@outlook.com]}" motto="One man's bug is another man's lesson."

You can also patch a new element of list property in Full Value. For example you can set the second email address by Partial Value:

az some-command --contact "{name:Bill,age:20,paid:true,emails:[Bill@microsoft.com]}" emails[1]="Bill@outlook.com" motto="One man's bug is another man's lesson."

Pass JSON in a file

It's also possible to pass a JSON file as a parameter value. This is the recommended approach when working with complex JSON.

az some-command --contact address.details=./address_details.JSON

Single Quotes String

Single Quotes String is used to pass a string value with special characters: :, ,, {, }, [, ], null, ??, and space. These characters often have other meanings when parsing shorthand syntax. Single quotes tell the parser to treat everything as a string.

Pass a string value with a space and other special characters

Here's example JSON to pass as a value in the --contact parameter:

{
  "name": "Bill RP",
  "age": 20,
  "paid": true,
  "data": "{a: [1, 2]}"
}

Use single quotes in Full Value format:

az some-command --contact "{name:'Bill RP',age:20,paid:true,data:'{a: [1, 2]}'}"

Use single quotes in Partial Value format:

az some-command --contact name="'Bill RP'" data="'{a: [1, 2]}'"

In the next example, it's also possible to remove single quotes for the name key. The parser doesn't distinguish between a Full Value expression, null value, or the ?? flag.

Use Partial Value format:

az some-command --contact name="Bill RP"

Work with apostrophes

The apostrophe character (') needs special escape (/') in Single Quotes String in order to distinguish the end of a Single Quotes String. A forward slash (/) is an escape character only after an apostrophe (') in Single Quotes String. If / isn't in Single Quotes String or / isn't after ', / is a normal character.

Pass Full Value format:

az some-command --contact "{name:'bill'/s',age:20,paid:true}"

Pass Partial Value format:

az some-command --contact name="'bill'/s'"

If value isn't in Single Quotes String, you don't need to add an escape character after '.

Pass Partial Value format:

az some-command --contact name="bill's"

Here's another example using the following JSON:

{
  "name": "Bill",
  "motto": "One man's bug is another man's lesson.",
  "age": 20,
  "paid": true,
  "emails": [
    "Bill@microsoft.com",
    "Bill@outlook.com"
  ]
}

In Full Value format, use a Single Quotes String and replace the ' with '/.

az some-command --contact "{name:Bill,motto:'One man'/s bug is another man'/s lesson.',age:20,paid:true,emails:[Bill@microsoft.com,Bill@outlook.com]}"

In Partial Value format, a value containing an apostrophe can be parsed as string, surrounded by double quotes.

az some-command --contact motto="One man's bug is another man's lesson."

Work with NULL values

Pass the word "null" as a string value

Sometime you need to pass a "null" string value. In order to distinguish with null value, it needs to be a Single Quotes String. For example if you want to pass "null" string into the name property in the --contact parameter:

JSON:

{
  "name": "null",
  "age": 20,
  "paid": true
}

Use Full Value format:

az some-command --contact "{name:'null',age:20,paid:true}"

Use Partial Value format:

az some-command --contact name="'null'"

Pass a null value

Shorthand syntax support null keyword in both Full Value and Partial Value formats.

For example if you want to pass following object with a null value address property in the --contact parameter:

{
  "name": "Bill",
  "age": 20,
  "paid": true,
  "emails": [
    "Bill@microsoft.com",
    "Bill@outlook.com"
  ],
  "address": null
}

Use Full Value format:

az some-command --contact "{name:Bill,age:20,paid:true,emails:[Bill@microsoft.com,Bill@outlook.com],address:null}"

Use Partial Value format:

az some-command --contact name=Bill address=null

Use a null value in update commands

In update commands, a null value is often used to unset properties of an object, or remove elements of an array or a dictionary.

{
  "contact": {
    "name": "Bill",
    "age": 20,
    "paid": true,
    "emails": [
      "Bill@microsoft.com",
      "Bill@outlook.com"
    ],
    "address": {
      "country": "USA",
      "company": "Microsoft",
      "details": {
        "line1": "15590 NE 31st St",
        "line2": "Redmond, WA"
      }
    }
  },

  "other_properties": {}
}

If there already exists a resource with the JSON values shown above, passing a null value in an update command resets the key's value.

az some-update-command --contact address=null

Here's another example that removes the first element of a resource's email:

az some-update-command --emails [0]=null

Use ?? to show help

The use of double question marks ?? is a special keyword to show the available help for a parameter or subproperty. It can also be used within shorthand syntax to get help.

Note

The Bash shell uses ? as a wildcard. Make sure the double question marks ?? are wrapped in the double quotes.

Use ?? to show a parameter's help message

Show help message of --contact parameter:

az some-command --contact "??"

Use ?? in Full Value format

Show help message of --contant parameter when writing Full Value:

az some-command --contact "{??"
az some-command --contact "{name:Bill,??"

Show help message of --contant.address property when writing Full Value:

az some-command --contact "{name:Bill,address:??"

Show help message of --contant.address.country property when writing Full Value:

az some-command --contact "{name:Bill,address:{country:??"

Show help message of --contant.emails property when writing Full Value:

az some-command --contact "{name:Bill,address:{country:USA},emails:??"

Show help message of the element of --contant.emails property when writing Full Value:

az some-command --contact "{name:Bill,address:{country:USA},emails:[??"

Use ?? in Partial Value format

Show help message of --contant.address property when writing Partial Value:

az some-command --contact address="??"

Show help message of --contant.emails property when writing Partial Value:

az some-command --contact emails="??"

Show help message of the element of --contant.emails property when writing Partial Value:

az some-command --contact emails[0]="??"

See also