![Bash: 쉘 보간에서 별칭이 인식되지 않습니다.](https://linux55.com/image/201246/Bash%3A%20%EC%89%98%20%EB%B3%B4%EA%B0%84%EC%97%90%EC%84%9C%20%EB%B3%84%EC%B9%AD%EC%9D%B4%20%EC%9D%B8%EC%8B%9D%EB%90%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
~$ bash --version
GNU bash, version 5.1.12(1)-release (x86_64-pc-linux-gnu)
~$ alias bab=python
~$ $(echo bab)
bash: bab: command not found
나는 bab이 "python"이 될 것이라고 예상했지만 그렇지 않은 것 같습니다.
~$ $(echo alias)
alias bab='python'
alias ls='ls --color=auto'
~$ bab
Python 3.10.1 (main, Dec 11 2021, 17:22:55) [GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
그러나 별칭은 인식되며 보간 외부에서 작동합니다. 보간 내에서 작동하지 않는 이유는 무엇입니까?
eval
일하다:
~$ eval $(bab)
Python 3.10.1 (main, Dec 11 2021, 17:22:55) [GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
아직도 이유를 알고 싶어요
답변1
별칭이 확장되었습니다.앞으로명령 대체, 문서화됨3.1.1 쉘 동작. "bab"은 나중에 실행됨$(echo bab)
~하지 않을 것이다별칭으로 처리됩니다.
대신 함수를 사용해 보세요.
unalias bab
bab() { python "$@"; }
$(echo bab) # launches a python shell
답변2
~에서man bash
별명 간단한 명령의 첫 번째 단어로 사용될 때 단어를 문자열로 바꿀 수 있습니다.