Bash — Как интерпретируются символы » и новой строки в одинарных кавычках?

#bash

#bash

Вопрос:

Согласно документации GNU, приведенной здесь, весь текст в одинарных кавычках следует интерпретировать буквально. Затем я попытался создать два псевдонима:

 alias alias1='
    echo hello'

alias alias2='
    echo hello'
  

Выполнение alias1 печатает hello , как я и ожидал. Выполнение alias2 приводит к тому, что текст не печатается. Заходим в терминал и вводим вручную , enter, echo hello также печатает hello . Не должно alias2 быть идентичным моему тестовому варианту вручную?

Комментарии:

1. Не удается воспроизвести. В какой версии bash вы видите сбой?

2. Я не могу воспроизвести это с помощью bash 5, какая версия у вас есть?

3. Я могу продублировать с помощью bash 3.2. Скорее всего, это проблема с самим alias встроенным, а не с заключенным в кавычки аргументом. Первое должно включать буквальный перевод строки в определение; второе не должно.

4. Точнее, это повторяется в bash 4.1, но не bash 4.2.

Ответ №1:

Это может быть связано с исправлением ошибки в bash 4.2. Из журнала изменений:

В этом документе подробно описываются изменения между этой версией, bash-4.2-alpha, и предыдущей версией, bash-4.1-release.

  1. Изменения в Bash

    a. Исправлена ошибка в анализаторе при обработке расширений псевдонимов, содержащих заключенные в кавычки новые строки.

Что касается определений, alias1 они должны начинаться с новой строки, за которой следует несколько пробелов, затем текст echo hello . alias2 должны быть почти идентичны, за исключением того, что они не начинаются с новой строки. В любом случае, пробел, предшествующий echo , отбрасывается после расширения псевдонима во время синтаксического анализа.

Комментарии:

1. Я только что протестировал на отдельной машине под управлением 4.4, и там работают как псевдонимы1, так и псевдонимы2. Похоже, это действительно проблема с bash, которая с тех пор была исправлена. Спасибо!