while
não é um comando, é uma palavra-chave do shell. As palavras-chave são reconhecidas antes que a expansão da variável aconteça, portanto, após a expansão, é tarde demais.
Você tem várias opções:
-
Não use uma variável.
while true ; do echo Evil Message; sleep 10; done &
-
Use
eval
para executar o shell sobre o valor expandido da variáveleval "$cmd" &
-
Invoca um shell para executar o loop
bash -c "$cmd" &
-
Use uma função (normalmente usada para armazenar código):
cmd() { while true ; do echo Evil Message; sleep 10; done; } cmd &