Почему мои здесь-документы (<< -) дают мне синтаксическую ошибку?

78
8

methods() {
cat <<-!
start
stop
restart
reload
status
methods
!
}

Правильно ли я получаю сообщение об ошибке


syntax error: unexpected end of file

спросил(а) 2021-01-19T15:28:22+03:00 6 месяцев, 1 неделя назад
1
Решение
109

Для здесь-документов в древних оболочках вам нужно точно соответствовать тегу. Это означает:


methods() {
cat <<!
start
stop
restart
reload
status
methods
!
}

Да, в начале строки, хотя вы можете сделать сложные вещи, такие как cat <<'^I!', чтобы установить маркер на одну вкладку, а затем !.


Теперь bash (и, возможно, более ранние оболочки) исправил это с вариантом <<-, который удаляет все ведущие вкладки из ваших строк данных и конечного маркера перед обработкой. Таким образом, вы все равно можете отступать:

methods() {
cat <<-!
start
stop
restart
reload
status
methods
!
}

Но обратите внимание на оговорку: она разделяет вкладки, а не пробелы в целом. Если у вас есть пробелы (или любой символ без табуляции, печатный или иной) где-либо перед символом !, он не будет работать.


Если вы используете vi, вы можете ввести :set list, чтобы увидеть непечатаемые символы немного лучше, иначе xd или od -xcb может дать вам шестнадцатеричный дамп вашего файла.

ответил(а) 2021-01-19T15:28:22+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема