Синтаксис ${...}
допускает только ссылку на переменную (или позиционный параметр), при необходимости в сочетании с расширение параметра.
Синтаксис $(...)
(или, что менее предпочтительно, его эквивалент в старом стиле, `...`
), выполняет подстановка команд, которая позволяет встраивать произвольные команды в чей выход stdout выражение расширяет.
Таким образом, вы можете объединить две функции следующим образом:
echo "$(lsOutput=$(ls); echo "${lsOutput//foo/bar}")"
Обратите внимание на несложное вложенное использование $(...)
, что является одним из основных преимуществ по сравнению с `...`
, использование которого здесь потребовало бы экранирования.
Тем не менее, любые переменные, которые вы определяете внутри подстановки команд, ограничены подоболочкой, в которой команда выполняется в любом случае, поэтому вы можете обойтись только командой, которая производит желаемый выход , учитывая, что важен только вывод stdout.
echo "$(ls | sed 's/foo/bar/')"
person
mklement0
schedule
10.05.2015