Bem, se você usar uma variável na linha de comando como essa, ela será dividida em palavras, mas isso acontece depois de itens sintáticos como {
(ou if
) serem analisados. Então, se você quiser, terá que usar eval
CMD="{ echo blah ; echo bleh; } > output"
eval "$CMD"
# output contains "blah" and "bleh"
Embora note eval
execute tudo na variável no shell atual, incluindo atribuições a variáveis (alterar IFS
pode ter efeitos engraçados para o restante do script, por exemplo). Você poderia executá-lo em um shell separado com bash -c "$CMD"
para atenuar pelo menos o problema de atribuição de variável.
Observe também que os backticks são usados para capturar a saída de um comando e usá-lo na linha de comando, portanto, isso executaria a saída de $CMD
também como um comando:
$ CMD="echo foo"
$ '$CMD'
-bash: foo: command not found
Se você está redirecionando a saída para um arquivo, não importa, mas provavelmente você também não precisa.