"확장 중인 별칭과 동일한 단어는 다시 확장되지 않습니다."

"확장 중인 별칭과 동일한 단어는 다시 확장되지 않습니다."

Bash 매뉴얼에 따르면

대체 텍스트의 첫 번째 단어에 별칭이 있는지 테스트하지만확장되는 별칭과 동일2차 확장은 없을 예정입니다. 예를 들어 별칭을 지정할 lsls -F있으며 Bash는 대체 텍스트를 재귀적으로 확장하려고 시도하지 않습니다.

참조에서 "same" 다음에 나오는 별칭을 찾으려고합니다.

  • 동일한 별칭을 사용하여 재귀 시퀀스로 확장된 별칭을 확장하거나

  • 확장된 별칭을 먼저 시작하거나

  • 확장을 시작할 마지막 별칭입니다.

그래서 예시를 만들어 봤습니다

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

a1다음과 같은 경우 별칭 확장 결과를 확인하고 싶습니다.

$ alias a4=a1;

또는

$ alias a4=a2;

또는

$ alias a4=a3;

쉘이 별칭 확장을 더 수행하지 않고 a1별칭 확장을 수행하여 별칭 확장 결과를 어떻게 확인할 수 있습니까 ?a1

답변1

매뉴얼에 따르면 쉘은 별칭 확장의 재귀로 인해 발생할 수 있는 루프를 피할 것이라고 나와 있습니다.

예( a1=a2=a3=a4)의 경우 alias a4=a1루프가 생성됩니다. 그런 다음 a1(resp. a2, a3, )를 수행하면 a4쉘이 a1(resp. a2, a3, )로 다시 루프되면 별칭이 아닌 (resp. , , ) a4라는 이름의 명령을 검색합니다 (이렇게 하면 끝없는 순환이 생성됩니다). ).a1a2a3a4

예:

$ 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

답변2

:> alias e="echo "
:> alias text=foo
:> e text
foo

기술적으로 쉘은 별칭 확장보다 한 단계 더 나아갔지만 그럼에도 불구하고 나는 그것이 당신이 의미하는 것이라고 생각합니다.

관련 정보