Eu tenho um desafio interessante sobre como escapar das aspas em um script bash.
Meu script bash tem uma longa chamada curl com uma grande estrutura -d json passada.
#!/bin/bash
Value4Variable=Value4
curl -s -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d \
'{"Variable1":"Value1",
"Variable2":"Value2\'s", # escape of quote doesnt work because of the previous single quote and backslash
"Variable3":"Value3",
"Variable4":"'"$Value4Variable"'",
"Variable5":"Value5"
}' \
https://www.hashemian.com/tools/form-post-tester.php
Qual é a melhor maneira de adicionar uma aspa simples à estrutura json? Já tentei várias combinações mas sem sucesso.
Existem várias maneiras de escapar de strings longas com aspas diferentes. O mais simples é terminar as aspas simples e escapar das aspas simples:
Mas há algumas coisas mais legais que você pode fazer. Heredocs são uma boa maneira de evitar o problema de citação:
@-
diga ao curl para ler do stdin e<<EOF
iniciar o heredoc que será alimentado no stdin do curl. O bom do heredoc é que você não precisa escapar de nenhuma aspas e pode usar variáveis bash dentro delas evitando a necessidade de se preocupar em como escapar das aspas e tornar tudo muito mais legível.Eu usaria
--data @filename
a notação para ler os dados do arquivo:json-data-file
Conteúdo da amostra :O pedido:
A saída:
Considere usar uma ferramenta compatível com JSON para criar documentos JSON. Fazer isso removeria a necessidade de escapar manualmente caracteres especiais como tabulações, nova linha, aspas duplas, etc. Uma aspa simples é, na verdade, um caractere que não precisa ser escapado em JSON. Você só precisa ter certeza de que está usando as aspas corretas para que o shell reconheça sua string corretamente.
A
jo
ferramenta daqui é feita para tornar a criação de documentos JSON a partir da linha de comando muito fácil:ou
A resposta para qualquer parte do código é