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:
- Bahasa pembuatan skrip Bash: Aturan kutipan Bash
- Bahasa pembuatan skrip PowerShell: Aturan Kutipan PowerShell
- Prompt Perintah Windows: Panduan: Karakter Escape, Pemisah, dan Kutipan di baris perintah Windows
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: