Создать сценарий из сценария Bash с помощью here-document; почему моя переменная заменяется?

Попробуйте скачать xzoom. Он есть в репозиториях и легче для вашей системы, чем kmag.

6
12.12.2016, 16:12
2 ответа

Чтобы фактически получить файл pippo , вам необходимо выполнить:

cat > pippo <<EOF

Что перенаправляет значения из этого документа в файл с именем pippo .

Затем, чтобы содержимое внутри документа-документа передавалось точно так, как написано, а не расширялось, оценивалось или изменялось, вам нужно заключить в кавычки слово после << .
Любое из этого (работают даже частичные кавычки):

<<'EOF'
<<"EOF"
<<\EOF
<<E"O"F
<<E\OF

Если нет кавычек, значение переменной «$ LOGFILE» расширяется до своего значения, которое кажется быть нулевым в вашей среде и теряется.

Короче говоря, используйте что-то вроде этого:

cat > pippo << \_EOF_
LOGFILE=test.log    
echo '#############################' >> $LOGFILE
_EOF_
0
27.01.2020, 20:24

Здесь документ по умолчанию подвергается расширению оболочки, а именно расширению параметров, подстановке команд и арифметическому расширению. Итак, в вашем случае происходит расширение переменной (параметра) - переменная LOGFILE расширяется в текущей оболочке, и, поскольку переменная предположительно не существует, поэтому возвращается (и заменяется) значение null в качестве расширенного ценить.

Чтобы получить метасимволы оболочки буквально в данном документе, используйте кавычки вокруг строки терминатора:

cat pippo <<'EOF'  ## "EOF" would do too
LOGFILE=test.log    
echo '#############################' >>"$LOGFILE"
EOF

Также укажите расширение переменной, поскольку (предположительно) оно относится к имени файла, чтобы разделение слов и расширение имени пути не выполнялись на это после расширения.

11
27.01.2020, 20:24

Теги

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