Escape do e comercial (&) na URL no Bash no WSL

0

Estou tentando escrever uma função de Bash que pegará alguns argumentos da linha de comando e os colocará em uma URL que contém parâmetros de URL (ou seja, contém ? e & ).

Se houver apenas um parâmetro na URL, não há & e não há problema, ou seja, se eu definir a seguinte função:

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

e invocá-lo com test bar , ele abre o URL https://example.com/?foo=bar no meu navegador, o que é totalmente correto.

O problema é quando quero adicionar um segundo parâmetro de URL. Eu então estendo a função da seguinte forma:

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

mas quando invoco-o com test bar qux , o mesmo URL de antes ( https://example.com/?foo=bar ) é aberto no meu navegador e meu terminal exibe o erro 'baz' is not recognized as an internal or external command, operable program or batch file.

Quebra de URL entre aspas duplas também não ajuda: quando eu mudar para

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

ele abre o URL https://example.com//?foo=bar" e ainda recebo o erro 'baz' is not recognized as an internal or external command, operable program or batch file.

    
por Jamy Mahabier 06.06.2018 / 14:40

1 resposta

2

Como cmd.exe é invocado com um comando, a % sintaxe de escapecmd.exe precisa ser usada, em vez da sintaxe de escape Bash, ou seja, & precisa ser escapado como ^& (e ? não precisa escapar). Os seguintes trabalhos como pretendido:

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

(Observe que 'baz' is not recognized as an internal or external command, operable program or batch file. é um erro gerado por cmd.exe : refere-se a um arquivo em lote, que é um conceito do Windows.)

    
por 06.06.2018 / 14:44