다음을 통해 공유


스크립팅 언어 간의 차이점 인용

Azure CLI 명령을 사용하는 경우 스크립팅 언어에서 따옴표를 사용하고 문자를 이스케이프하는 방법을 알고 있어야 합니다. 다른 셸에서 사용되는 스크립트를 지원하는 경우 따옴표 차이를 이해하면 귀중한 개발 시간이 절약됩니다.

작은따옴표 또는 이스케이프 문자가 포함된 매개 변수 값으로 예상치 못한 결과를 방지하려면 다음과 같은 몇 가지 제안이 있습니다.

공백 및 따옴표

  • 공백이 포함된 매개 변수 값을 제공하는 경우 값을 따옴표로 묶습니다.

  • Bash 및 PowerShell에서 변수 값에 작은따옴표가 포함된 경우 값을 큰따옴표로 래핑하고 그 반대의 경우도 마찬가지입니다.

  • Bash에서 이스케이프된 큰따옴표는 문자열의 일부로 처리됩니다.

  • Windows 명령 프롬프트에서 변수 값 내의 따옴표는 값의 일부로 처리됩니다.

다음은 몇 가지 예입니다.

# 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

올바른 예제에 대한 Bash 출력은 다음과 같습니다.

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

출력에 따옴표를 포함하려면 다음과 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"

JSON 문자열

  • 작은따옴표를 사용하여 JSON 문자열 내의 콘텐츠를 유지합니다. 인라인 JSON 값을 제공할 때는 작은따옴표가 필요합니다. 예를 들어 이 JSON은 Bash 및 PowerShell '{"key": "value"}'모두에서 올바르습니다.

  • 명령이 Windows 명령 프롬프트에서 실행되는 경우 큰따옴표를 사용해야 합니다. Cmd.exe "{"key":"value"}" 위의 JSON 문자열과 동일합니다.

  • JSON 값에 큰따옴표가 포함된 경우 이스케이프해야 합니다.

  • JSON 매개 변수 값을 사용하는 경우 Azure CLI의 @<file> 규칙을 사용하고 셸의 해석 메커니즘을 바이패스하는 것이 좋습니다.

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

Bash, PowerShell 및 Cmd에 허용되는 JSON 형식 패턴은 다음과 같습니다.

Bash의 clear 명령을 사용하여 테스트 간에 콘솔 출력을 제거합니다.

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

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

다음 두 예제는 Bash에서 따옴표와 공백을 해석하기 때문에 잘못 되었습니다.

잘못된 형식 문제 콘솔 출력
az {"key":"value"} --debug 작은따옴표 또는 이스케이프 문자 누락 명령 인수: ['{key:value}', '--debug']
az {"key": "value"} --debug 작은따옴표 또는 이스케이프 문자가 누락되고 추가 공간이 포함되어 있습니다. 명령 인수: ['{key:', 'value}', '--debug']

빈 문자열

  • PowerShell에서 값이 빈 따옴표 문자열()''인 경우 .'""'

  • Bash 또는 PowerShell에서 값이 빈 따옴표 문자열('')인 경우 다음을 사용합니다 "''".

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

공백으로 구분된 값

일부 Azure CLI 명령은 공백으로 구분된 값의 목록을 가져옵니다. 키 이름 또는 값에 공백이 포함된 경우 전체 쌍 "my key=my value"을 래핑합니다. 예시:

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

CLI 매개 변수가 공백으로 구분된 목록을 허용한다고 명시하는 경우 다음 두 가지 형식 중 하나가 필요합니다.

  • 따옴표가 없는 공백으로 구분된 목록의 예: --parameterName firstValue secondValue

  • 따옴표로 묶인 공백으로 구분된 목록의 예: --parameterName "firstValue" "secondValue"

이 예제는 공백이 있는 문자열입니다. 공백으로 구분된 목록이 아닙니다.: --parameterName "firstValue secondValue"

특수 문자

PowerShell 스크립팅 언어에는 다음과 @같은 특수 문자가 있습니다. PowerShell에서 Azure CLI를 실행하려면 특수 문자 앞에 `를 추가하여 이스케이프합니다. 값을 작은따옴표 또는 큰따옴표 "/"로 묶을 수도 있습니다.

# 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

하이픈 문자

매개 변수의 값이 하이픈으로 시작하는 경우 Azure CLI는 해당 값을 매개 변수 이름으로 구문 분석하려 합니다. 값으로 구문 분석하려면 =를 사용하여 매개 변수 이름과 값(--password="-VerySecret")을 연결합니다.

--query 매개 변수

명령과 함께 매개 변수를 --query 사용하는 경우 JMESPath일부 문자를 셸에서 이스케이프해야 합니다.

다음 세 가지 명령은 Bash에서도 정확하고 동일합니다.

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

다음은 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'

Bash, PowerShell 및 Cmd 간의 더 많은 예제 비교는 Azure CLI 명령 출력 쿼리를 참조하세요.

--debug 매개 변수

따옴표 넣기 문제를 해결하는 가장 좋은 방법은 --debug 플래그를 사용하여 명령을 실행하는 것입니다. 이 플래그는 Python 구문에서 Azure CLI가 받은 실제 인수를 나타냅니다.

Azure CLI 명령을 --debug사용하여 문제 해결에 대한 자세한 내용은 Azure CLI 문제 해결을 참조하세요.

언어 규칙 스크립팅

각 조직에서 게시한 스크립팅 언어 규칙에 대한 빠른 링크는 다음과 같습니다.

참고 항목

알려진 PowerShell 문제로 인해 몇 가지 추가 이스케이프 규칙이 적용됩니다. 자세한 내용은 PowerShell 스크립팅 언어로 Azure CLI를 실행하기 위한 고려 사항을 참조 하세요.

참고 항목

다음 문서에서 더 많은 스크립팅 언어 비교를 찾습니다.