As strings entre aspas simples são usadas como estão. Em uma sequência de aspas simples, o único caractere especial é o caractere de aspas simples '
, que termina a string.
Em sequências entre aspas duplas, os caracteres "\
$ are special:
" ends the string,
'fazem com que o próximo caractere perca sua interpretação especial, '
inicia uma substituição de comando e $
inicia uma substituição de variável, comando substituição ou expansão aritmética.Assim, desde que você deseja expandir as variáveis, use aspas duplas em vez de aspas simples.Isso não está relacionado ao uso de uma substituição de comando.
Além disso, a substituição de comandos não faz sentido no contexto. Você está pegando a saída do comando mosquitto_pub …
, dividindo-a no espaço em branco, interpretando cada uma das palavras resultantes como um padrão glob e usando o resultado dessa expansão como um comando e seus argumentos. Não tenho certeza do que este programa está tentando fazer; Se você quiser apenas executar o comando mosquitto_pub
, remova os backticks. Se você quiser atribuir sua saída a uma variável, você precisa escrever uma tarefa como
some_variable='mosquitto_pub -t "/$user_defined_new_machine_location/cmd" -m '-changelocation''
Em uma nota não relacionada, não use nomes de variáveis como condition_while_one
. Este nome não tem sentido. Use um nome que reflete para o que a variável é usada. Para este exemplo específico, você não precisa da variável - faça isso:
while true; do
…
if …; then
mosquitto_pub …
break
fi
done