#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.
Изменения в Bash
a. Исправлена ошибка в анализаторе при обработке расширений псевдонимов, содержащих заключенные в кавычки новые строки.
Что касается определений, alias1
они должны начинаться с новой строки, за которой следует несколько пробелов, затем текст echo hello
. alias2
должны быть почти идентичны, за исключением того, что они не начинаются с новой строки. В любом случае, пробел, предшествующий echo
, отбрасывается после расширения псевдонима во время синтаксического анализа.
Комментарии:
1. Я только что протестировал на отдельной машине под управлением 4.4, и там работают как псевдонимы1, так и псевдонимы2. Похоже, это действительно проблема с bash, которая с тех пор была исправлена. Спасибо!