Bash substituição de variável em uma string JSON

3

Estou tentando criar um JSON no BASH, onde um dos campos é baseado no resultado de um comando anterior

BIN=$(cat next_entry)
OUTDIR="/tmp/cpupower/${BIN}"
echo $OUTDIR
JSON="'"'{"hostname": "localhost", "outdir": "${OUTDIR}", "port": 20400, "size": 100000}'"'"
echo $JSON

O script acima, quando executado, retorna:

/tmp/cpupower/0
, port: 20400, size: 100000}': /tmp/cpupower/0

Como posso substituir adequadamente as variáveis dentro dessas strings entre aspas?

    
por Guru Prasad 27.09.2016 / 15:53

2 respostas

7
JSON=\''{"hostname": "localhost", "outdir": "'"$OUTDIR"'", "port": 20400, "size": 100000}'\'

Isso é sair das aspas simples para a expansão de $OUTDIR . Colocamos essa expansão dentro de aspas duplas para uma boa medida, embora para uma atribuição de variável escalar não seja estritamente necessário.

Quando você está passando a variável $JSON para echo , as cotações são necessárias para desabilitar o operador split + glob. Também é melhor evitar echo para dados arbitrários:

printf '%s\n' "$JSON"
    
por 27.09.2016 / 16:06
3

A resposta de Stéphane é ótima e vencedora. Aqui é só uma dica; em vez de fazer

BIN=$(cat next_entry)

Você pode fazer:

BIN=$(<next_entry)

E, assim, salvar a criação de um processo extra. Leia mais aqui .

    
por 27.09.2016 / 16:52