Это довольно сложно сделать, так как в отличие от кавычек, вы не можете просто остановить и перезапустить раскрытие в документе здесь -. Но мы могли бы опубликовать -и обработать здесь -документ с помощью sed
:
.
#!/bin/bash
sourcedir=/some/path
sed -e "s,%%sourcedir%%,$sourcedir,g" << 'EOF'
some commands here with $variables not expanded
except for the special %%sourcedir%%, which is
EOF
Запуск, который производит вывод:
some commands here with $variables not expanded
except for the special /some/path, which is
Команда sed
просто заменяет все экземпляры %%sourcedir%%
любым значением $sourcedir
(, если оно не содержит запятых; вам нужно будет изменить разделитель для команды s
на что-то другое.)
Для ясности я изменил заполнитель на другой формат, но вы также можете оставить его как $sourcedir
, а затем использовать sed -e "s,\$sourcedir,$sourcedir,"
. (Хотя обратите внимание, что он также будет соответствовать $sourcedirectory
и другим подобным переменным, но не ${sourcedir}
, даже если это будет эквивалентно в оболочке.)
В качестве альтернативы используйте GNUenvsubst
для документа, если он у вас есть (он является частьюgettext
):
#!/bin/bash
export sourcedir=/some/path
envsubst '$sourcedir' << 'EOF'
some commands here with $variables not expanded
except for the special $sourcedir, which is
EOF