«слово, идентичное расширяемому псевдониму, не раскрывается во второй раз»

В руководстве Bash сказано

Первое слово замещающего текста проверяется на псевдонимы, но слово, которое идентично раскрываемому псевдониму , не раскрывается второй раз. Это означает, что можно использовать псевдонимы от ls до ls -F для экземпляр, и Bash не пытается рекурсивно расширять замену текст.

Я пытаюсь выяснить, какой псевдоним следует за «идентичным» в цитате,

  • любой псевдоним, расширяемый в той же последовательности рекурсий раскрытия псевдонима, или

  • псевдоним, раскрытие которого было начато первым, или

  • псевдоним, расширение которого было запущено в последний раз.

Итак, я создаю пример

$ alias a1=a2; 
$ alias a2=a3;
$ alias a3=a4;

и хочу проверить результат расширения псевдонима a1 в следующих случаях

$ alias a4=a1;

или

$ alias a4=a2;

или

$ alias a4=a3;

Как я могу проверить расширение псевдонима результат a1 , возможно, выполнив расширение псевдонима на a1 , не позволяя оболочке идти дальше, чем расширение псевдонима?

0
06.08.2017, 07:19
2 ответа

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

В вашем примере (a1=a2=a3=a4), если вы выполняете alias a4=a1, вы создаете цикл. Затем, как только вы выполнитеa1(соотв. a2, a3, a4), как только оболочка возвращается кa1(соотв. a2, a3,a4)он будет искать команду с именемa1(соответственно. a2, a3, a4), который НЕ является псевдонимом (, так как это создало бы никогда -не заканчивающийся цикл ).

Пример:

$ a1() { echo Phew, I got out of the loop; }
$ alias a1='echo "(a1)"; a2' a2='echo "(a2)"; a3'
$ alias a3='echo "(a3)"; a4' a4='echo "(a4)"; a1'

$ a1
(a1)
(a2)
(a3)
(a4)
Phew, I got out of the loop

$ a2                              # Command a2 does not exist anywhere
(a2)
(a3)
(a4)
(a1)
a2: command not found
5
20.08.2021, 11:34
:> alias e="echo "
:> alias text=foo
:> e text
foo

Технически оболочка идет дальше расширения псевдонимов, но, тем не менее, я думаю, что вы имели в виду именно это.

1
20.08.2021, 11:34

Теги

Похожие вопросы