WSL 아래 Bash의 URL에서 앰퍼샌드(&)를 이스케이프합니다.

WSL 아래 Bash의 URL에서 앰퍼샌드(&)를 이스케이프합니다.

?명령줄에서 일부 매개변수를 가져와 URL 매개변수가 포함된 URL(예: 포함 및 포함 &) 에 입력하는 Bash 함수를 작성하려고 합니다 .

URL에 매개변수가 하나만 있으면 아무런 &문제도 없습니다. 즉, 다음 함수를 정의하면:

test() {
    cmd.exe /c start https://example.com/\?foo=$1
}

으로 호출하면 test bar내 브라우저에서 URL이 열립니다 https://example.com/?foo=bar. 이는 완전히 정확합니다.

문제는 두 번째 URL 매개변수를 추가하려고 할 때입니다. 그런 다음 다음과 같이 기능을 확장했습니다.

test() {
    cmd.exe /c start https://example.com/\?foo=$1\&baz=$2
}

그런데 ( ) 로 호출했을 때 test bar qux이전과 동일한 URL을 브라우저에서 열면 https://example.com/?foo=bar터미널에 오류가 표시됩니다.'baz' is not recognized as an internal or external command, operable program or batch file.

URL을 큰따옴표로 묶는 것도 도움이 되지 않습니다.

test() {
    cmd.exe /c start "https://example.com/\?foo=$1\&baz=$2"
}

URL이 열리지 https://example.com//?foo=bar"만 여전히 오류가 발생합니다.'baz' is not recognized as an internal or external command, operable program or batch file.

답변1

cmd.exe명령을 통해 호출 되므로cmd.exe이스케이프 구문&이스케이프해야 하는 ^&(그리고 ?이스케이프할 필요가 없는) Bash 이스케이프 구문 대신 사용해야 합니다 . 다음은 예상대로 작동합니다.

test() {
    cmd.exe /c start "https://example.com/?foo=$1^&baz=$2"
} 

(참고로 이는 'baz' is not recognized as an internal or external command, operable program or batch file.Windows cmd.exe개념인 배치 파일을 의미합니다.)

관련 정보