Не оценивает выражение при использовании cat

У меня есть один сценарий bash, который предназначен для вывода другого сценария bash. Я использую cat. Я хочу оценить некоторые выражения в выходном скрипте, но не другие.

PROJECT=myproject

cat << EOF > create_dir.sh
#!/usr/bin/env bash

DATE=`date '+%y%m%d-%H%M'`
mkdir $PROJECT/\$DATE
EOF

Полученный файл create_dir.sh выглядит следующим образом:

#!/usr/bin/env bash

DATE=171123-1834

mkdir myproject/$DATE

Я хочу получить следующий результат:

#!/usr/bin/env bash

DATE=`date '+%y%m%d-%H%M'`

mkdir myproject/$DATE

Как я могу изменить этот скрипт так, чтобы выражение, следующее за DATE=, не оценивается, и в то же время гарантирует, что $PROJECT оценивается?

3
задан 23 November 2017 в 18:44

2 ответа

Вам необходимо экранировать символы `` ', поскольку они означают «выполнить этот код». Так что строка должна выглядеть так:

DATE=\`date '+%y%m%d-%H%M'\`
4
ответ дан 23 November 2017 в 18:44

cat << \EOF

Если метка заключена в кавычки, то здесь документ принимается как есть. Или же процитируйте обратные кавычки в этом документе.

Соответствующей частью страницы руководства является:

Если какая-либо часть слова заключена в кавычки, разделитель является результатом удаления кавычки на слово , и строки в данном документе не раскрываются. Если слово не заключено в кавычки, все строки документа здесь подвергаются расширению параметров, подстановке команд и арифметическому расширению, последовательность символов \ < newline > игнорируется, и \ должен использоваться для цитирования символов \, $ и `.

Обратите внимание, что это решение будет копировать здесь документ дословно; чтобы сделать некоторые расширения, а другие не сделать, единственное решение - использовать \, чтобы процитировать те конструкции, которые не раскрываются.

4
ответ дан 23 November 2017 в 18:44

Другие вопросы по тегам:

Похожие вопросы: