Ну, если вы используете такую переменную в командной строке, она будет разбита на слова, но это произойдет после синтаксического анализа таких элементов, как {
(или , если
) . Итак, если вы этого хотите, вам придется использовать eval
CMD="{ echo blah ; echo bleh; } > output"
eval "$CMD"
# output contains "blah" and "bleh"
Хотя примечание eval
будет запускать все, что есть в переменной в текущей оболочке, включая присваивания переменным (изменение IFS
может иметь забавные эффекты для остальной части сценария, скажем). Вы можете запустить его в отдельной оболочке с помощью bash -c "$ CMD"
, чтобы уменьшить, по крайней мере, проблему с назначением переменных.
Также обратите внимание, что обратные кавычки используются для захвата вывода команды и использования его в командной строке, так что это приведет к запуску вывода $ CMD
также в виде команды:
$ CMD="echo foo"
$ `$CMD`
-bash: foo: command not found
Если вы перенаправляете вывод в файл, это не имеет значения, но, скорее всего, вам это тоже не нужно.