Вы можете избежать бесполезного использования cat
и лучше обрабатывать несовпадающие кавычки:
$ read -r -d '' VAR <<'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
Если вы не заключаете в кавычки переменную, когда вы выводите ее, новые строки теряются. Цитируя это сохраняет их:
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
Если вы хотите использовать отступ для удобства чтения в исходном коде, используйте тире после менее чем. Отступы должны быть сделаны с использованием только табуляции (без пробелов).
$ read -r -d '' VAR <<-'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
Если вместо этого вы хотите сохранить вкладки в содержимом результирующей переменной, вам нужно удалить вкладку из IFS
. Маркер терминала для здесь doc ( EOF
) не должен иметь отступ.
$ IFS='' read -r -d '' VAR <<'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
Вкладки могут быть вставлены в командной строке, нажав Ctrl- V Tab. Если вы используете редактор, в зависимости от того, какой из них может также работать, или вам может потребоваться отключить функцию, которая автоматически преобразует вкладки в пробелы.
Приостановлено до дальнейшего уведомления.
источник
'EOF'
, с экранированными` in the content: if the second line has
переносами строк с помощью команды cd`, я получаю ответ: " .sh: line X: cd: команда не найдена "; но если я приведу двойные кавычки"EOF"
; тогда переменные bash${A}
не сохраняются как строки (они раскрываются); но затем, линия-брейки будут сохранены - и я не имею проблемы запуска команды сcd
во второй строке ( и как «EOF» и «EOF» , кажется, играют хорошо и сeval
, для выполнения набора команд , хранящихся в строковая переменная ). Ура!"EOF"
переменной с двойным кавычкой , еслиeval $VAR
вызывается через , приведет к тому, что весь остальной сценарий будет закомментирован, так как здесь $ VAR будет рассматриваться как одна строка ; чтобы иметь возможность использовать#
комментарии bash в многострочном скрипте, используйте двойные кавычки и переменную в переменнойeval call:
«$ VAR» `.eval
этими методами, но я не отслеживал его, поскольку он был частью некоторого пакета, в которомeval
некоторые переменные определены в его конфигурационном файле. Сообщение об ошибке было:/usr/lib/network/network: eval: line 153: syntax error: unexpected end of file
. Я просто переключился на другое решение.