Одно из ограничений приведенных выше ответов заключается в том, что они оба требуют, чтобы переменные были экспортированы в среду. Вот то, что я придумал, чтобы переменные были локальными для текущего сценария оболочки:
#!/bin/sh
FOO=bar;
FILE=`mktemp`; # Let the shell create a temporary file
trap 'rm -f $FILE' 0 1 2 3 15; # Clean up the temporary file
(
echo 'cat <<END_OF_TEXT'
cat "$@"
echo 'END_OF_TEXT'
) > $FILE
. $FILE
В приведенном выше примере переменная $FOO
должна быть заменена в файлах, названных в командной строке , Я уверен, что это может быть улучшено, но это работает для меня до сих пор.
Спасибо за предыдущие ответы за их идеи!