Почему псевдоним работает иногда как nameref, а иногда нет?

Я заметил пример с https://unix.stackexchange.com/a/383825/674

$ alias foo=bar $ foo () { blah "$@"; } $ type -a foo bar foo is aliased to `bar' bar is a function bar () { blah "$@" } 

Таким образом, переопределение псевдонима foo действительно переопределяет командную bar с псевдонимом. Это работает как nameref, то есть переменная со ссылочным атрибутом.

Я больше экспериментировал со следующими примерами.

  • Почему mya=cat не переименовывает mya в cat , а также не переопределяет альфа- echo для cat ?

  • Почему mya () { cat test.sh; } mya () { cat test.sh; } переопределить aliased echo функции, как и nameref?

Благодарю.

 $ alias mya=echo $ type mya mya is aliased to `echo' $ mya abc # mya behaves exactly as echo abc $ mya=cat $ type mya mya is aliased to `echo' $ mya test.sh # mya=cat doesn't alias mya to cat test.sh $ mya () { cat test.sh; } $ type mya mya is aliased to `echo' $ mya # Redefining mya as a function works, by outputing the content of test.sh #! /usr/bin/env bash echo $_ echo $0 $ echo # Redefining mya also redefines the aliased echo, just like a nameref #! /usr/bin/env bash echo $_ echo $0 

One Solution collect form web for “Почему псевдоним работает иногда как nameref, а иногда нет?”

Псевдоним расширяется, когда это первое слово в команде. Поэтому, когда вы вводите:

 alias foo=bar foo () { blah "$@"; } 

псевдоним foo расширяется, поэтому он обрабатывается так, как если бы вы набрали:

 bar () { blah "$@"; } 

Когда вы вводите:

 alias mya=echo mya=cat 

первое слово в команде – mya=cat , а не только mya , поэтому псевдоним не расширяется. = не является разделителем слов, это просто разделитель между переменной и значением в присваивании переменной.

  • Использовать команды под каталогом только для интерактивного использования?
  • Какие команды имеют параметр -h для чтения человеком и как его включить по умолчанию с переменной w / env?
  • Проверьте, используется ли слово перед сглаживанием
  • Как отключить псевдоним в bash для одной команды?
  • Почему в команде bash отсутствуют псевдонимы?
  • Команда bash - aliased - использовать оригинальную команду?
  • Как псевдоним команды с '
  • В zsh как установить псевдоним для `less` для получения вывода stderr?
  • создание псевдонима для cmd с backticks
  • Почему бы не использовать псевдоним в составных командах?
  • Улучшить существующий псевдоним для динамической замены текста в командной строке
  • Linux и Unix - лучшая ОС в мире.