Почему бы не использовать псевдоним в составных командах?

Из руководства по bash

Псевдонимы расширяются, когда считывается определение функции, а не когда функция выполняется, потому что определение функции само является составной командой. Как следствие, псевдонимы, определенные в функции, недоступны до тех пор, пока эта функция не будет выполнена. Чтобы быть в безопасности, всегда указывайте определения псевдонимов на отдельной строке и не используйте псевдоним в составных командах .

Я понимаю, что может быть какая-то потенциальная проблема использования псевдонима в определении функции , хотя все еще есть некоторые сомнения относительно того, какая из следующих операций оболочки выполняется внутри тела функции при запуске определения функции и при вызове функции? ,

Но почему «не использовать псевдоним в составных командах» обобщают определения функций на общие составные команды?

Какие еще виды составных команд могут иметь какие-то проблемы с псевдонимом?

One Solution collect form web for “Почему бы не использовать псевдоним в составных командах?”

Но почему «не использовать псевдоним в составных командах» обобщают определения функций на общие составные команды?

Это наоборот: ваш отрывок из руководства bash не завершен. Компонентные команды обобщают на определения функций, которые являются составными командами.

Комбинированная команда выполняется, когда она полностью считывается. Псевдонимы определяются, когда они выполняются, а не когда они читаются (очевидно). Но замена псевдонимов происходит только при чтении команды.

Возьмите эту составную команду, например:

$ alias echo='echo Follow my advice:' && > echo Alias is a basic substitution mechanism Alias is a basic substitution mechanism $ echo Use aliases sparingly Follow my advice: Use aliases sparingly 

Во-первых, вы можете видеть, что поскольку && вводит составную команду, оболочка ничего не выполняет и запрашивает вторую строку ввода.

Когда эта команда двухстрочной команды считывается , псевдонимы заменяются перед выполнением команды. Во время этой подстановки псевдоним echo еще не существует, поэтому ничего не заменяется. Наконец, когда вся команда выполняется, это встроенная команда echo которая используется, даже если она появляется после определения псевдонима.

Когда вторая команда echo считывается , псевдоним echo существует и заменяется. Таким образом, команда, выполняемая, является echo Follow my advice: Use aliases sparingly .

Определение функции – это более сложная составная команда, но работа одинакова. Любое определение внутреннего псевдонима вступает в силу только при вызове функции.

  • Как использовать 'в псевдониме?
  • Могу ли я сделать псевдоним для псевдонима в bash?
  • команда find вызывает ошибки при работе внутри
  • псевдоним? не работает в zsh
  • Как получить то же самое с цветами, работающими как на OSX, так и на Ubuntu?
  • Найти, где определяется команда bash или из нее?
  • Как копировать или перемещать файлы без запроса на перезапись?
  • Определение псевдонима и его немедленное использование
  • Как сделать работу с псевдонимами на других терминалах
  • Как выполнить псевдоним сразу после поиска его в одном лайнере?
  • bash alias, начинающийся с pipe, не работает?
  • Interesting Posts

    Элементы в контекстном меню в Lubuntu

    как удалить карантин из разрешений файлов в os x

    Разница между подоболочками и замещением процесса

    Может ли команда find быть более компактной?

    скрипт init.d не будет отправлять графические данные

    Что означает = ~ означает?

    Включение USB-накопителей только на определенном USB-порту или для учетной записи пользователя

    Существуют ли какие-либо приложения или расширения для включения функции глобального меню для рабочего стола GNOME?

    Невозможно добавить serialport (nodejs module) при создании файловой системы и кросс-компиляции инструментов для ARM-процессора

    Debian 8 | Проблемы с Windows: как управлять высоким разрешением?

    Как отключить все методы экономии экрана / экрана в Scientific Linux 6.1?

    awk, sed, grep, perl … которые распечатываются в этом случае?

    Нет звука из приложений cli или из zsnes

    Как сжать все файлы из всех подпапок, если в подпапке нет `Archive.zip`?

    Чтение из последовательного порта самым простым способом?

    Linux и Unix - лучшая ОС в мире.