Dentro de aspas simples, nada é expandido. Então você precisa sair das citações simples. Em qualquer caso, você gostaria de citar duas vezes suas expansões de variáveis, a menos que queira que split + glob se aplique a elas, então:
A=$(multichain-cli issue '{"name":'"$ASSET"',"open":true}' "$D")
# '''''''' """""" '''''''''''''
printf '%s\n' "$A"
(o ''''
, """""
para mostrar quais partes estão com aspas simples, que são aspas duplas).
O mais provável é que você queira que o conteúdo de $ASSET
esteja entre aspas duplas no código JSON, portanto, é necessário incluí-los (no literal, que está na parte de citações simples):
A=$(multichain-cli issue '{"name":"'"$ASSET"'","open":true}' "$D")
# ''''''''' """""" ''''''''''''''
Não confunda as aspas duplas que são usadas para citar shell (aqui para evitar split + glob na expansão de $ASSET
) e as aspas duplas que são passadas textualmente para multichain-cli
.
Pode ser necessário considerar os casos em que $ASSET
contém aspas duplas em si ou outros caracteres (como barra invertida, nova linha ou outros caracteres de controle) que são especiais na sintaxe JSON. Para caracteres não-ASCII, você também precisará verificar se eles estão codificados da maneira esperada por multichain-cli
.
Como alternativa, você pode usar aspas duplas para todas as coisas, como @Bex mostrou , embora isso signifique que você precisa escapar do "
s ( mas também $
, \
e '
) com barra invertida no texto passado para multichain-cli
(e evite usar a antiga sintaxe '...'
para substituição de comando, pois ele faz processamento adicional com contrabarra).