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).