Bash:shell 插值中无法识别别名

Bash:shell 插值中无法识别别名
~$ 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

别名 当单词用作简单命令的第一个单词时,允许用字符串替换单词。

相关内容