Bagikan melalui


Mengutip perbedaan antara bahasa skrip

Saat Anda bekerja dengan perintah Azure CLI, ketahui bagaimana bahasa skrip Anda menggunakan tanda kutip dan karakter escape. Jika Anda mendukung skrip yang digunakan dalam shell yang berbeda, memahami perbedaan kutipan akan menghemat jam pengembangan yang berharga.

Untuk menghindari hasil yang tidak tertandingi dengan nilai parameter yang berisi tanda kutip tunggal atau ganda, atau karakter escape, berikut adalah beberapa saran:

Spasi kosong dan tanda kutip

  • Jika Anda memberikan nilai parameter yang berisi spasi kosong, bungkus nilai dalam tanda kutip.

  • Di Bash dan PowerShell, jika nilai variabel Anda berisi tanda kutip tunggal, bungkus nilai dalam tanda kutip ganda, dan sebaliknya.

  • Di Bash, tanda kutip ganda yang lolos, diperlakukan sebagai bagian dari string.

  • Di Prompt Perintah Windows, kutipan di dalam nilai variabel diperlakukan sebagai bagian dari nilai.

Berikut beberapa contohnya:

# Correct
myVariable="my string ' ' wrapped in double quotes"
myVariable='my string " " wrapped in single quotes'
myVariable="my string with escaped \" \" double quotes wrapped in double quotes"

# Wrong, escaped single quotes in Bash are not treated as part of the string
myVariable='my value with escaped \' \' single quotes wrapped in single quotes'

# after each example ...
echo $myVariable

Output bash untuk contoh yang benar adalah sebagai berikut:

my string ' ' wrapped in double quotes
my string " " wrapped in single quotes
my string with escaped " " double quotes wrapped in double quotes

Jika Anda ingin tanda kutip disertakan dalam output, keluarkan variabel seperti ini: echo \"$myVariable\".

echo \"$myVariable\"
"my string ' ' wrapped in double quotes"

echo \'$myVariable\'
'my string " " wrapped in single quotes'

echo \"$myVariable\"
"my string with escaped " " double quotes wrapped in double quotes"

String JSON

  • Gunakan tanda kutip tunggal untuk mempertahankan konten di dalam string JSON. Tanda kutip tunggal diperlukan saat menyediakan nilai JSON sebaris. Misalnya, JSON ini benar di Bash dan PowerShell: '{"key": "value"}'.

  • Jika perintah Anda berjalan pada Prompt Perintah Windows, Anda harus menggunakan tanda kutip ganda. Setara dengan string JSON di atas dalam Cmd.exe adalah "{"key":"value"}" .

  • Jika nilai JSON berisi tanda kutip ganda, Anda harus menghindarinya.

  • Saat bekerja dengan nilai parameter JSON, pertimbangkan untuk menggunakan konvensi Azure CLI @<file> dan melewati mekanisme interpretasi shell.

    az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
    

Berikut adalah pola format JSON yang diterima untuk Bash, PowerShell, dan Cmd:

Gunakan perintah Bash clear untuk menghapus output konsol antar pengujian.

# Correct in Bash
az '{"key":"value"}' --debug
>> Command arguments: ['{"key":"value"}', '--debug']

az "{\"key\":\"value\"}" --debug
>> Command arguments: ['{"key":"value"}', '--debug']

Dua contoh berikutnya ini salah karena tanda kutip dan spasi ditafsirkan oleh Bash.

Format yang salah Masalah Output konsol
az {"key":"value"} --debug Tanda kutip tunggal atau karakter escape hilang Argumen perintah: ['{key:value}', '--debug']
az {"key": "value"} --debug Tanda kutip tunggal atau karakter escape hilang, dan berisi spasi tambahan Argumen perintah: ['{key:', 'value}', '--debug']

String kosong

  • Di PowerShell, jika nilai Anda adalah string tanda kutip kosong (''), gunakan '""'.

  • Di Bash atau PowerShell, jika nilai Anda adalah string tanda kutip kosong (''), gunakan "''".

    # Correct in Bash
    myVariable="''"
    
    # Correct in PowerShell
    $myVariable = "''"
    $myVariable = '""'
    

Nilai yang dipisahkan spasi

Beberapa perintah Azure CLI mengambil daftar nilai yang dipisahkan spasi. Jika nama kunci atau nilai berisi spasi, apit seluruh pasangan: "my key=my value". Contohnya:

az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"

Saat parameter CLI menyatakan bahwa parameter menerima daftar yang dipisahkan spasi, salah satu dari dua format diharapkan:

  • Contoh daftar yang tidak dikutip dan dipisahkan spasi: --parameterName firstValue secondValue

  • Contoh daftar yang dipisahkan spasi yang dikutip: --parameterName "firstValue" "secondValue"

Contoh ini adalah string dengan spasi di dalamnya. Ini bukan daftar yang dipisahkan spasi: --parameterName "firstValue secondValue"

Karakter khusus

Ada karakter khusus dalam bahasa pembuatan skrip PowerShell, seperti di @. Untuk menjalankan Azure CLI di PowerShell, tambahkan ` sebelum karakter khusus untuk mengeluarkannya dari program. Anda juga dapat mengapit nilai dalam tanda kutip tunggal atau ganda "/".

# The following three examples will work in PowerShell
--parameterName `@parameters.json
--parameterName '@parameters.json'
--parameterName "@parameters.json"

# This example will not work in PowerShell
--parameterName @parameters.json

Karakter tanda hubung

Jika nilai parameter dimulai dengan tanda hubung, Azure CLI akan mencoba mengurainya sebagai nama parameter. Untuk mengurainya sebagai nilai, gunakan = untuk menggabungkan nama parameter dan nilai: --password="-VerySecret".

Parameter --query

Jika Anda menggunakan parameter --query dengan perintah, beberapa karakter JMESPath harus dikeluarkan dari program dalam shell.

Ketiga perintah ini benar dan setara dalam Bash:

az version --query '"azure-cli"'
az version --query \"azure-cli\"
az version --query "\"azure-cli\""

Berikut adalah dua contoh perintah yang salah di Bash:

# Wrong, as the dash needs to be quoted in a JMESPath query
az version --query azure-cli
az version: error: argument --query: invalid jmespath_type value: 'azure-cli'

# Wrong, as the dash needs to be quoted in a JMESPath query, but quotes are interpreted by Bash
az version --query "azure-cli"
az version: error: argument --query: invalid jmespath_type value: 'azure-cli'

Untuk contoh perbandingan lainnya antara Bash, PowerShell, dan Cmd, lihat Kueri output perintah Azure CLI.

Parameter --debug

Cara terbaik untuk memecahkan masalah kutipan adalah menjalankan perintah dengan bendera --debug. Bendera ini mengungkapkan argumen aktual yang diterima oleh Azure CLI dalam sintaks Python.

Untuk informasi selengkapnya tentang pemecahan masalah perintah Azure CLI dengan --debug, lihat Pemecahan Masalah Azure CLI.

Aturan bahasa pembuatan skrip

Berikut adalah tautan cepat ke aturan bahasa pembuatan skrip seperti yang diterbitkan oleh organisasi masing-masing:

Catatan

Karena masalah yang diketahui di PowerShell, beberapa aturan penggunaan karakter escape tambahan diberlakukan. Untuk informasi selengkapnya, lihat Pertimbangan untuk menjalankan Azure CLI dalam bahasa pembuatan skrip PowerShell.

Lihat juga

Temukan lebih banyak perbandingan bahasa skrip dalam artikel ini: